2
基本问题:
如果我有一个实体B,并且ManyToOne字段x链接到另一个实体A,那么如何获得在其x字段中有A的B的所有实例?
JPA如何使用ManytoOne关系创建查询?
更具体地说:
考虑下面的entites:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private Key id;
@OneToMany(mappedBy = "owner", cascade = CascadeType.ALL)
private List<Message> messages;
}
ic class Message {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column (name="MESSAGE_ID")
private Key id;
@ManyToOne(fetch = FetchType.LAZY)
private User owner;
private int status;
}
我已经有了这个查询准备
Query query = em.createQuery("SELECT m from Message m WHERE m.owner = :us");
这里是因为我想建一个方法的API:
输入:用户u,状态s
输出:拥有者u和状态s的所有消息的列表。
我知道我应该使用EntityMenager构建查询,但什么是正确的语法?我在零件中放置了什么(*“SELECT m FROM Message m WHERE owner = _ AND status =”+ status *)。
当我尝试这样做:
Query query = em.createQuery("SELECT m from Message m "
+"WHERE m.owner.id = :ownerId");
我得到了follwing错误:
javax.persistence.PersistenceException:
SELECT FROM Message m WHERE m.owner.username = :ownerID:
Can only reference properties of a sub-object if the sub-object is embedded.
在此先感谢....
大,但现在我得到这个消息:从“选择消息m WHERE m.owner.username =:OWNERID:如果子嵌入对象只能引用一个子对象的属性” – 2011-01-23 20:50:53