如何使用hibernate标准在一对多映射中获取单行

时间:2017-01-25 11:40:08

标签: java hibernate jpa hibernate-criteria

:sort n/.\{-}: /

标准

@Entity
@Table(name = "test")
public class A {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "ID")
   private int    id;

   @OneToMany(fetch = FetchType.EAGER)
   @JoinColumn(name = "B_ID")
   private List<B> details;
   ......
}

@Entity
@Table(name = "test1")
public class B {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "ID")
   private int    id;

   @Column(name = "NAME")
   private String name;
   ......
}

由于有很多匹配的行ID为“1”,我会得到以下结果。但我只需要第一个

结果:

Criteria criteria = session.createCriteria(A.class)
                .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
                .add(Restrictions.in(id, list))
List = criteria.list();

尝试获得如下结果:只有第一行而不是test1表中的所有行(B.class)

{
  "id":1,
  "details":[
     {
        "name":abc,
     },
     {
        "name":123,
     },
     {
        "name":xyz,
     },
 }

我正在使用hibernate条件来获取结果。我想限制从连接表中检索的数据(一对多映射)。这可能吗?

请告诉我如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

不完全确定你的目标是什么,但是:

1 如果您知道只有结果,请使用:

Entity criteria.uniqueResult();

2 如果您期望很多,您可以订购,然后设置您想要的最佳结果数量(前十个):

criteria.addOrder(Order.asc(/* field*/));
criteria.setFirstResult(0);
criteria.setMaxResults(10);
criteria.list();