JPQL/HQL 使用 Spring Data JPA 的删除查询

huangapple 未分类评论45阅读模式
英文:

JPQL/HQL delete query with spring data jpa

问题

我对JPQL/HQL并不太熟悉,所以这个问题可能有点愚蠢,我正在尝试使用字符串JPA编写删除查询。

我有一个GeneratedStatement对象,它有一个包含createdDateGeneratedStatementId对象。

我的查询应该类似这样:

@Query(value = "DELETE FROM EODGeneratedStatement s WHERE s.createdDate < :expiryDate")
int deleteByIdCreatedDateBefore(LocalDate expiryDate);

但我觉得它缺少了GeneratedStatementId对象,我不太确定该如何添加它。我认为它应该像s.getGeneratedStatementId().createdDate这样。

英文:

I'm not really familiar with JPQL/HQL, so the question might be a bit dumb, I'm trying to write a delete query with string jpa.

I have GeneratedStatement object which has GeneratedStatementId object which consists of createdDate.

My query should look something like this:

@Query(value = &quot;DELETE FROM EODGeneratedStatement s WHERE s.createdDate &lt; :expiryDate&quot;)
int deleteByIdCreatedDateBefore(LocalDate expiryDate);

But I think it lacks the GeneratedStatementId object in it, and I'm not sure how to add it. It should be like s.getGeneratedStatementId().createdDate something I believe

答案1

得分: 0

我假设您有一个名为GeneratedStatement@Entity,其中包含一个名为GeneratedStatementId的POJO对象,其中包含变量createdDate

如果您正在寻找GeneratedStatementGeneratedStatementId之间的@OneToOne映射,下面的查询应该可以工作。

@Query(value = "DELETE FROM GeneratedStatement s LEFT JOIN s.GeneratedStatementId sid WHERE sid.createdDate < :expiryDate")
int deleteByIdCreatedDateBefore(LocalDate expiryDate);

@OneToOne映射和FetchType都是Lazy

@Query(value = "DELETE FROM GeneratedStatement s LEFT JOIN FETCH s.GeneratedStatementId sid WHERE sid.createdDate < :expiryDate")
英文:

I assume you have an @Entity named GeneratedStatement which has GeneratedStatementId POJO object in it which contain variable createdDate.

If you are looking for a @OneToOne Mapping between GeneratedStatement and GeneratedStatementId, below query should work.

@Query(value = &quot;DELETE FROM GeneratedStatement s left join 
                        s.GeneratedStatementId sid WHERE sid.createdDate &lt; :expiryDate&quot;)
int deleteByIdCreatedDateBefore(LocalDate expiryDate);

@OneToOne Mapping and FetchType is Lazy,

@Query(value = &quot;DELETE FROM GeneratedStatement s left join fetch 
                        s.GeneratedStatementId sid WHERE sid.createdDate &lt; :expiryDate&quot;)

huangapple
  • 本文由 发表于 2020年4月6日 19:26:31
  • 转载请务必保留本文链接:https://java.coder-hub.com/61058699.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定