gpt4 book ai didi

java - Criteria Api : Use another parameter in multiselect,(如果第一个为空)

转载 作者:行者123 更新时间:2023-12-01 09:16:13 25 4
gpt4 key购买 nike

我有一个 POJO 类 person,它有两个字段。让我们假设其中只有一个具有值,而另一个始终为 null

public class Person {
private String music;
private String sports;
...
}

我想通过 Criteria Api 将其中之一填充到 DTO 列表中。这是我的(不完整的)Dao 代码的片段:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PersonDTO> query = cb.createQuery(PersonDTO.class);
Root<Person> root= query.from(Person.class);

Path<String> musicPath = root.get(Person_.music);
Path<String> sportsPath= root.get(Person_.sports);

query.multiselect(/** TODO */);

List<PersonDTO> results = em.createQuery(query).getResultList();

有没有办法使用音乐体育进行多选,具体取决于当前记录中哪一个不为空。或者我是否必须定义一个子查询来实现此行为?

最佳答案

您正在查找 COALESCE 表达式(请参阅规范中的“查询语言”章节,“Case 表达式”段落)。

Create an expression that returns null if all its arguments evaluate to null, and the value of the first non-null argument otherwise.

相应的条件 API 是 CriteriaBuilder.coalesce() 方法集。选择单个字符串非常简单:

query.select(cb.coalesce(musicPath, sportsPath));

如果您想要一个 PersonDTO,当然,您必须使用 CriteriaBuilder.construct() 方法和适当的构造函数 :

query.select(cb.construct(PersonDTO.class, cb.coalesce(musicPath, sportsPath), ...));

关于java - Criteria Api : Use another parameter in multiselect,(如果第一个为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527746/

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