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