我正在为下表寻找合适的 JPQL 查询,以便它可以在 java 代码中工作它不应该是本机查询
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
下面是 table 模式,我无法对其进行正确的 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;
Mobile
实体中有这样的属性吗?
@ManyToOne(optional = false)
@JoinColumn(name = "hardware_id")
private Hardware hardware;
您在 @JoinColumn
中指定的名称是数据库列,而不是您的实体属性名称。
问题是您混合了属性名称和列名称。
查询:
"SELECT m FROM Mobile m JOIN Hardware h ON m.hardware.id = h.id"
下面是 table 模式,我无法对其进行正确的 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;
Mobile
实体中有这样的属性吗?
@ManyToOne(optional = false)
@JoinColumn(name = "hardware_id")
private Hardware hardware;
您在 @JoinColumn
中指定的名称是数据库列,而不是您的实体属性名称。
问题是您混合了属性名称和列名称。
查询:
"SELECT m FROM Mobile m JOIN Hardware h ON m.hardware.id = h.id"