【问题标题】:how to query embedded object in Hibernate?如何在 Hibernate 中查询嵌入的对象?
【发布时间】:2016-07-12 20:10:57
【问题描述】:

我有 A、B 类

class A{
@Embedded
private B objB; 
}

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

现在我有一堆A类的objs集,我想查询数据库,让B类中包含相同x和y的行(z在这种情况下比较不重要)应该被选中,我该怎么做做到这一点?

这就像 SQL 中的“In”,但由于我是在比较嵌入式对象,我应该如何处理它?非常感谢!!

【问题讨论】:

  • 你的问题是,如何查询xy具有相同值的所有A对象?
  • A 看起来不像是由 Hibernate 管理的实体。它缺少 Entity 注释和 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()或者hqlFROM A a where a.objB.x=:x and a.objB.y=:y").setParameter("x", 2).setParameter("y", 2).list()

标签: java hibernate hql hibernate-criteria


【解决方案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 (?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多