gpt4 book ai didi

java - Hibernate:Criteria API:查询 CollectionOfElements 中不包含指定元素的实体?

转载 作者:行者123 更新时间:2023-12-01 15:50:40 26 4
gpt4 key购买 nike

假设我有以下两个类(class);用户和位置。我想创建一个 DetachedCriteria 来查询用户表,并返回没有名称为“xyz”的位置的所有用户。

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;

@CollectionOfElements
Set<Location> locations;
}

@Entity
public class Location{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;

@Column
String name;
}

以下代码将返回设置了名称为“xyz”的位置的所有用户:

DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.createCriteria("locations")
dc.add(Restrictions.eq("name", "xyz"));

如果我更改为 Restrictions.ne(),则不起作用,因为它只会返回实际设置了位置的用户。此外,如果为某个用户设置了一堆位置,它会一遍又一遍地重复该用户。

有什么想法吗?

最佳答案

使用原始帖子中所述的实体用户位置:

1) 检查关联的位置是否为空。

Junction or = Restrictions.disjunction();
or.add(Restrictions.isEmpty("locations"));

2) 使用 LEFT_JOIN 和要在“ne”限制中使用的别名为位置创建关联条件。 LEFT_JOIN 是必需的,因此即使位置关系为空,我们仍然可以获得用户记录。

userCriteria.createCriteria("locations", "loc", Criteria.LEFT_JOIN);
or.add(Restrictions.ne("loc.name", "xyz"));

3) 将析取添加到原始用户条件。

userCriteria.add(or);

关于java - Hibernate:Criteria API:查询 CollectionOfElements 中不包含指定元素的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6117784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com