Java 错误的hql查询
我有以下实体:Java 错误的hql查询,java,mysql,sql,hibernate,hql,Java,Mysql,Sql,Hibernate,Hql,我有以下实体: @Entity public class Item { @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid2") private String id; @ManyToOne private User ownerUser; @ManyToMany private Set<User> grantedUsers;
@Entity
public class Item {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
private String id;
@ManyToOne
private User ownerUser;
@ManyToMany
private Set<User> grantedUsers;
我看到错误消息:
[2014-07-21 15:07:31] d.grantedUsers is not mapped [select Item from com.test.Item d, d.grantedUsers u where ownerUser.id= :id or u.id =:id]
实体映射到hibernate/spring*.xml
文件中
怎么了?
从项目d、d.grantedUsers u中选择项目,其中ownerUser.id=:id或u.id=:id
这个问题对我来说似乎很奇怪。我打赌Hibernate
会尝试将from
子句中的d.grantedUsers
作为实体类进行威胁(未映射)。试试看:
从项目d中选择d,其中ownerUser.id=:id或d.grantedUsers.id=:id
指定反向关系并使用mappedBy
class User{
....
@ManyToOne
@JoinColumn(name="Item ")
private Item item;
...
}
FROM User where id= :grantedUsersIds or id = :ownerUserids
您的用户类中应该有Item的多个One关系,从上面的查询中,您可以从以下位置的hibernate文档中获取所有项目
d.grantedUsers.id
它能工作吗??因为它是集合而不是对象,所以您需要在HQL中对集合使用集合操作关键字。@Antoniosss请提供任何示例
class User{
....
@ManyToOne
@JoinColumn(name="Item ")
private Item item;
...
}
FROM User where id= :grantedUsersIds or id = :ownerUserids
select d from Item d join d.grantedUsers u
where d.ownerUser.id = :id or u.id = :id