2014-10-02 36 views
0

讓說我有2個表由一個一對多的關係是否可以使用外鍵值在JPA2中創建條件查詢?

public class Slave 
{ 
    @Id 
    @Column(name = "id") 
    long id; 

    @JoinColumn(name = "master", referencedColumnName = "id") 
    Master master; 
} 

public class Master 
{ 
    @Id 
    @Column(name = "id") 
    long id; 

    @OneToMany(mappedBy = "master", targetEntity = Slave.class) 
    Collection<Slave> slaves; 
} 

加入了是否有可能創造CriteriaQuery中選擇法師所有的奴隸與已知的ID? 生成SQL這樣的:

SELECT * FROM slave s WHERE s.master=XXX; 

應該CriteriaQuery不僅僅是 「本地查詢」 像這樣

_entityManager.createNativeQuery("SELECT s FROM master s WHERE s.master = ?1"); 
query.setParameter(1, XXX); 

預先感謝您

回答

0

我找到了一些解決方法。不知道它是否是JPA2規範的一部分,但是對於hibernate,我能夠將另一個屬性映射到Long的同一個DB列。我不得不讓它只讀使用insertable=false, updatable=false

public class Slave 
{ 
    @Id 
    @Column(name = "id") 
    long id; 

    @Column(name = "master", insertable=false, updatable=false) 
    long masterId; 
    @JoinColumn(name = "master", referencedColumnName = "id") 
    Master master; 
} 

然後我就用這個屬性

+0

剛一說明創建CriteriaQuery中,如果你改變'master'的財產,'masterId'不immediatelly改變,你需要堅持實體並從EntityManager中刷新它... – mirec 2014-10-04 11:41:08

相關問題