2012-12-13 145 views
2

我的問題可能很簡單,我無法找到答案。JPA:從實體,查詢其他實體之間沒有關係映射

我想要做這樣的事情:

@Entity 
public class EntityA { 

    @Transient 
    @SomeQueryAnnotation(query="select b from EntityB where b.id=1") 
    private EntityB entityB; 
} 

EntityB是一種靜態的資源。它不應該保存回數據庫。實體之間也沒有映射。

[編輯]

,你認爲這是好的,當我這樣做:

@Entity 
public class EntityA { 

    private EntityB getEntityB() { 
     ServiceRemote service = (ServiceRemote)context.lookup("ejb:ServiceRemote"); 
     return service.getEntityB(); 
    } 
} 

比應該還是可以使用遠程處理,因爲連接可以在每個配置客戶端的jndi.properties文件。當您需要從您的實體訪問數據庫時,您最喜歡的方法是什麼?

+1

如果兩個實體之間沒有關係,爲什麼要讓實體B成爲實體A的一部分,而不是單獨獲取它?這種氣味或者像設計糟糕的傳統模式或者有問題的設計決定。 – kostja

+0

好問題。 EntityA就像一個插件並擴展了SuperEntity。但是爲了完成它的工作,它需要檢索更多的數據。這種情況更是一個例外,然後是這樣做的典型方式。 – hidehawk

+0

嗯,我懷疑JPA以這種方式彎曲,但我很好奇。 – kostja

回答

0

最佳推薦 - 除非這些對象具有數據庫內關係,否則不應該存在實體關係。

第二好 - 我會建議你創建一個數據傳輸對象來獲取你的對象。

@Entity 
public class EntityA { 

    @Transient 
    private EntityB entityB; 
} 

@Stateless 
public class EntityADTO { 
    EntityManager em; 

    public EntityA findA(Object pkey) { 
     EntityA a = em.find(okey, EntityA.class); 
     a.entityB = em.find(1, EntityB.class); 

     return a; 
    } 
}