我需要根据另一列(绘图编号)获取一列(修订版)最大值。谁能告诉我此功能的 JPA 查询。
我编写了以下查询,但该查询不起作用。
请帮助我如何在 JPA 查询中编写 MAX 和 OVER (PARTITION BY) 函数。
@Query("select dr FROM
(SELECT MAX(dr.revision) over (PARTITION BY d.drawing_number) AS latest_revision
FROM DrawingRate dr
JOIN dr.drawing d
JOIN d.modifiedBy mb
WHERE mb.Id=:Id
OR piu.Id=:Id
ORDER BY d.localModifiedOn DESC NULLS LAST
) WHERE dr.revision = :latest_revision")
Run Code Online (Sandbox Code Playgroud)
运行此 Spring 数据 JPA 查询时不起作用,显示以下错误:
引起原因:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:(第1行附近第16列[select dr from (select max(dr.revision) over (partition by d.drawing_number) ) AS last_enrolment_date 来自实体.DrawingRate dr join dr.drawing d JOIN d.modifiedBy mb left join dr.modifiedBy u WHERE mb.Id=:IdOR piu.Id=:Id …
我正在尝试使用CONTAINS函数(MS SQL)创建Criteria API查询:
select*from com.t_person where where(last_name,'xxx')
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> cq = cb.createQuery(Person.class);
Root<Person> root = cq.from(Person.class);
Expression<Boolean> function = cb.function("CONTAINS", Boolean.class,
root.<String>get("lastName"),cb.parameter(String.class, "containsCondition"));
cq.where(function);
TypedQuery<Person> query = em.createQuery(cq);
query.setParameter("containsCondition", lastName);
return query.getResultList();
Run Code Online (Sandbox Code Playgroud)
但是获得异常:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的AST节点:
有帮助吗?
我知道有几十个问题具有相同的主题,但我无法弄清楚为什么它们在我的案例中不起作用。
我有两张表,一张的名称为 Account,一张的名称为 CustomerRelations,它们之间存在一对多的关系(一个帐户可以属于多个 customerRelations...一个帐户可以在没有其他客户关系的情况下存在,但有一个客户关系只能附加到现有帐户)
这就是它们在我的实体类中的注释方式:
账户表:
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private List<CustomRel> customRels = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
客户关系表:
@ManyToOne(fetch = FetchType.EAGER)
private Account account;
Run Code Online (Sandbox Code Playgroud)
我有业务逻辑,我想根据“帐户”选项卡中保存的特定日期调用查询:
@NamedQuery(name = Account.FIND_BY_ACC_NBR, query = "select acc from Account acc where acc.accountNumber =:accountNumber")
Run Code Online (Sandbox Code Playgroud)
此查询提供了帐户表中的正确数据,但对于字段 customerRels 我得到以下异常:
**Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.**
Run Code Online (Sandbox Code Playgroud)
当在我的 Account 对象上调用 getter 方法时,也会出现同样的情况:
在我的示例中,有一个帐户对象,其中的 customerRels 列表为空。因此数据库中没有与 accountId 连接的 customerRels 记录。
据我所知,我的Account实体类中的fetchType是lazy-默认的,对吧?
在我创建表的 SQL 脚本中,CustomerRelations 表中仅添加了 account_id,Account 表中没有对子对象的引用。
我知道这是一个非常平庸的问题,但我需要一些帮助。我应该修改我的 JPQL 查询吗?