当前位置: 首页 > 面试题库 >

Hibernate OneToMany条件返回重复项

洪开济
2023-03-14
问题内容

我有一个由以下映射的关联:

@Entity
public class Parent
{
...
    @Id
    @Column(name = "parent_id")
    private Long id;

    @OneToMany(mappedBy = "parent")
    @OrderBy("id")
    private List<Child> children;
...
}

@Entity
public class Child
{
...
    @Id
    @Column(name = "child_id")
    private Long id;

    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "parent_id")
    private Parent parent;

    @Column
    private Boolean enabled;
...
}

我想使用Criteria
API返回所有Parent包含一个或多个Child带有attribute实体的实体的列表enabled=false。我不希望映射children集合被查询过滤。

例如,给出以下内容:

Parent A
    - Child A enabled=true
    - Child B enabled=false

Parent B
    - Child A enabled=false
    - Child B enabled=false

Parent C
    - Child A enabled=true
    - Child B enabled=true

该查询应返回以下内容:

Parent A
    - Child A enabled=true
    - Child B enabled=false

Parent B
    - Child A enabled=false
    - Child B enabled=false

到目前为止,我正在使用以下条件查询:

Criteria crit = session.createCriteria(Parent.class);
crit.createCriteria("children").add(Restrictions.eq("enabled", false));
List<Parent> result = crit.list();
return result;

然而,它返回的等价于

Parent A
    - Child A enabled=true
    - Child B enabled=false

Parent B
    - Child A enabled=false
    - Child B enabled=false

Parent B
    - Child A enabled=false
    - Child B enabled=false

即,它为每个子元素返回一个父记录(填充了子集合enabled=false

有谁知道在这种情况下如何仅返回唯一的父元素?

意见表示赞赏,p。


问题答案:

您需要添加distinct,例如

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

应该适合您的情况



 类似资料:
  • 我写一个函数,应该返回数组时,它是真和一个字符串时,假我第一次这样写:但是当myArry是空的,除了接收我得到一个空的arr,当我写,它工作,我不明白为什么? 下面我的代码:

  • 相当新的反应,我相信这很容易,但我正在尝试转换: 转换成单个返回语句。 基本上是替换

  • 我正在写一些代码,有些事情让我困惑。我有一个名为的数字数组。现在我想遍历这个列表,如果一个值高于60,例如,我想创建一个新的对象数组(集合),在那里我们存储高值,它的索引来自原始数组。所以以下面的代码为例 控制台。日志输出如下 这个输出是我所需要的,但是如何防止返回未定义的值呢?我考虑过使用数组。但这似乎不合适?我应该使用不同的数组方法吗?我不想使用for循环并推送到一个新数组,除非这是在不返回未

  • 问题内容: 我想从数组中检索所有重复的条目。这在PHP中可行吗? 我想返回一个仅包含重复值的数组:“ hello”。 所需的输出数组: 问题答案: 您需要使函数不区分大小写,以获取所需的“ Hello” =>“ hello”结果,请尝试以下方法: 输出为: 通过@AlixAxel编辑: 这个答案很有误导性。它仅在此特定条件下有效。这个反例: 惨败 。另外,这不是保留重复项的方法: 由于重复的值之一

  • 我购买了一张桌子,DDL为: Purchase表与purchaseproduct有一对多关系,purchaseproduct的DDL为: 以下是我的POJO: 购买:@Entity@Table(name=“Purchase”)@Access(AccessType.Property)公共类购买{private LongProperty IDPurchase;private StringPropert

  • 假设我想写一个函数,它可以接受一个参数,这个参数可以是null类型,也可以是非null类型。如果参数不可为null,则返回类型也应不可为null。类似地,如果参数是可空类型,那么返回类型也应该是可空类型。 以下是我为实现这一职能所做的尝试: 函数签名似乎是正确的,因为它在调用站点上实现了所需的行为,例如: 即返回类型确实由参数类型以正确的方式确定。 然而,我的问题在于函数的实现。如果不将返回值强制