2016-03-25 61 views
0

我有類A,B如何在Hibernate中查詢嵌入對象?

class A{ 
@Embedded 
private B objB; 
} 

@Embeddable 
class B{ 
Integer x; 
Integer y; 
float z; 
} 

現在我有一大堆的A級OBJ文件集,我想查詢數據庫,以便行包含相同的X和Y在B類(z是並不重要在這種情況下比較)應該選擇,我該如何實現?

這就像SQL中的「In」,但由於我在比較嵌入對象,我該如何處理它?非常感謝!!

+0

是您問題,如何查詢所有具有相同值'x'和'y'的'A'對象? –

+0

它看起來不像'A'是由Hibernate管理的實體。它缺少「實體」註釋和「Id」字段。 'A'是一個實體還是普通的java類?如果'A'是一個實體,則可以嘗試標準查詢'session1.createCriteria(A.class,「a」).add(Restrictions.and(Restrictions.eq(「a.objB.x」,1),Restrictions)。 eq(「a.objB.y」,1)))。list()'或hql'FROM A a where a.objB.x =:x and a.objB.y =:y「)。setParameter(」x 「,2).setParameter(」y「,2).list()' –

回答

1

鑑於類:

public class RandomEntity { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 
    @Embedded 
    private EmbeddableEntity embedded; 
} 

@Embeddable 
public class EmbeddableEntity { 
    private Long valueA; 
    private Long valueB; 
} 

您可以查詢它想:

session.createQuery("select a from RandomEntity a where a.embedded.valueA=:value").setParameter("value", 1L).list(); 

Hibernate: select randomenti0_.id as id1_2_, randomenti0_.valueA as valueA2_2_, randomenti0_.valueB as valueB3_2_ from RandomEntity randomenti0_ where randomenti0_.valueA=? 

或:

session.createQuery("select a from RandomEntity a where a.embedded.valueA in (:value)").setParameterList("value", Arrays.asList(1L, 2L)).list(); 

Hibernate: select randomenti0_.id as id1_2_, randomenti0_.valueA as valueA2_2_, randomenti0_.valueB as valueB3_2_ from RandomEntity randomenti0_ where randomenti0_.valueA in (?)