【问题标题】:i am looking for a proper JPQL query for the below tables so that it can work in java code it should not to be a native query我正在为下表寻找适当的 JPQL 查询,以便它可以在 java 代码中工作,它不应该是本机查询
【发布时间】:2020-02-18 20:21:29
【问题描述】:

以下是我无法进行正确 JPQL 查询的表架构

  Mobile table     | hardware table       |  releases table
  --------------------------------------------------------------
  id pk            |   id  pk            | id  pk
  name varchar         size  varchar       launchdate varchar
  hardware_id fk   |   pdname varchar    | tally  varchar
  releases_id fk   |                     | 

 i have tried all below query's in my code but it all gives error for:
  //String qry="Select m.name,h.size,h.pdname from com.example.users.Mobile m, 
   com.example.users.entities.Hardware h where m.hardware_id=h.id ";


    //String qry="Select m from Mobile m inner join fetch m.hardware h where m.hardware_id=h.id";

    //String qry = "SELECT m FROM Mobile m JOIN m.hardware_id h WHERE m.hardware_id = h.id";

    String qry="select m.name from mobile m,hardware h where m.hardware_id=h.id";


   System.out.println("in entity manager Query is "+ qry);

    Query query = entityManager.createQuery(qry);

    return query.getResultList();

错误:org.hibernate.hql.internal.ast.QuerySyntaxException:移动设备未映射

 This is what i have in Mobile Entity

  @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name ="hardware_id",referencedColumnName = "id")
 private Hardware hardware;

 @OneToOne(cascade = CascadeType.ALL)
 @JoinColumn(name="releases_id",referencedColumnName = "id")
 private Releases releases;

【问题讨论】:

    标签: java spring-boot jpa jpql


    【解决方案1】:

    您在@JoinColumn 中指定的名称是数据库列而不是您的实体属性名称。 问题是您将属性名和列名混合在一起。

    查询:

    "SELECT m FROM Mobile m JOIN Hardware h ON m.hardware.id = h.id"

    【讨论】:

    • 请您详细说明我还没有得到
    • hardware.id 我应该使用我正在使用 hardware_id 这给了我错误..感谢您的时间和帮助:)
    【解决方案2】:

    Mobile 实体中是否有这样的属性?

        @ManyToOne(optional = false)
        @JoinColumn(name = "hardware_id")
        private Hardware hardware;
    

    【讨论】:

    • 这是我在移动实体中拥有的:@OneToOne(cascade = CascadeType.ALL) @JoinColumn(name ="hardware_id",referencedColumnName = "id") 私有硬件硬件; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="releases_id",referencedColumnName = "id") private 发布版本;
    • 我已经在帖子中更新了相同的内容..你可以看看那里
    • 完成提及更改仍然相同的错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] throw exception [Request processing failed;嵌套异常 isorg.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: mobile is not mapped [select m.brand, m.phone from mobile m,hardware h where m.hardware_id=h.id AND sim = '纳米'];嵌套异常是 java.lang.IllegalArgumentException:
    • org.hibernate.hql.internal.ast.QuerySyntaxException: mobile is not mapped [select m.brand, m.phone from mobile m,hardware h where m.hardware_id=h.id AND sim = '纳米']]
    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多