gpt4 book ai didi

java - JPA:通过不同的列选择任何行

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

我有一个 SQL 表,其中包含一些数据:

------------------+------------------------+------------------------
Name + Zone + School
-------------------------------------------+------------------------
Joe + Coolzone + VCU
Mike + ReallyCoolZone + ODU
Kyle + NotcoolZone + ODU

我在这里尝试做的是使用 JPA 仅选择一行,包含区域和学校,其中学校是不同的。

因此,我期望结果:

CoolZone, VCU
ReallyCoolZone, ODU

我尝试在 JPA 中发出这样的查询,但收到一条错误,指出返回了多个结果:

select distinct a.zone, a.school from MyEntity a

根据我所读到的内容,此错误是有道理的,原因有两个。 a) 当我们发出 select 语句时,我们不会返回整个实体,而是返回部分 b) jpa 不知道如何将这些值映射到我的实体。

根据我所读到的内容,我可以通过创建一个新的构造函数并明确说明应如何构造返回的对象来解决此问题。这篇文章中提到了这一点:https://stackoverflow.com/a/24710759/5655414

创建新的构造函数后,我的查询字符串相当于以下内容:

select new MyEntity(distinct a.zone, a.school) from MyEntity a

我收到一条错误消息:

 Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: distinct

应该将其放置在什么位置?如果这段代码是疯狂的并且毫无意义,是否有可能有更有效的方法来实现我的目标?

JPA 2.0 hibernate 3.4

最佳答案

这个问题的解决方案相当简单。首先,我们必须为我们寻找的多选列添加条件,并将 unique 设置为 true:

final CriteriaBuilder builder = em.getCriteriaBuilder();
final CriteriaQuery<MyEntity> criteriaQuery = builder.createQuery(MyEntity.class);
final Root<MyEntity> myEntity= criteriaQuery.from(MyEntity.class);
final CriteriaQuery<MyEntity> select = criteriaQuery.multiselect(
myEntity.get("zone"), versionTrack.get("school"));
select.distinct(true);

然后,我们必须为 MyEntity 类创建一个额外的构造函数,以便可以从结果中创建它:

public MyEntity(final String zone, final String school) {...}

关于java - JPA:通过不同的列选择任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160560/

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