java 如何使用hib条件在一对多Map中提取单行

mfpqipee  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(80)
@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;
   ......
}

标准

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

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

结果:

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

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

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

我正在使用hib条件来获取结果。我想限制从连接表中获取的数据(一对多Map)。这可能吗?
请让我知道如何做到这一点。

qco9c6ql

qco9c6ql1#

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

1如果您知道将只有结果,则用途:

Entity criteria.uniqueResult();

2如果您希望有很多结果,可以先排序,然后设置您想要的最佳结果数(下面的前十个):

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

相关问题