我有实体:
@Entity
@Table(name = "doc_documents")
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "doc_document_titles",
joinColumns =
@JoinColumn(name = "document_id"))
@Column(name = "title")
private List<String> titles = new ArrayList<>();
….
)
和存储库接口:
public interface DocumentRepo
extends JpaRepository <Document, Long>,
QueryDslPredicateExecutor<Document> {
}
执行查询时:
Predicate crit = qDoc.titles.any().eq("x");
docRepo.findAll(crit);
select
document0_.id as id10_
from
doc_documents document0_
where
exists (
select
1
from
doc_documents document1_
inner join
doc_titles title2_
on document1_.id= title2_.document_id
where
document1_.id=document0_.id
and locthesaur2_.title = ?
)
select
document0_.id as id10_
from
doc_documents document0_
where
exists (
select
1
from
doc_titles title2_
where
title2_.document_id=document0_.id
and title2.title= ?
)
在JPQL级别上,谓词在内部被翻译成如下所示
exists (select 1
from Document doc2
inner join doc2.titles as doc2_titles
where doc2 = doc and doc2_titles = ?)
不能直接在from部分中使用标题,因为它不是一个实体。如果您想出更好的方法在JPQL中表达这一点,请告诉我。
如果OneToMany也有类似的问题,请创建一张票据。
我得到了以下数据结构 我正在寻找一个查询dsl谓词,它给我的所有出版物,其中任何Author.name包含某个字符串,例如“汉斯” 我试过了: 但是,如果有多个作者在名称中包含“Hans”,则这是抱怨。有没有像出版一样就像一个集合?
我想使用QueryDSL库构建select count查询,如下所示: 中选择计数(1) 我创建了下一个代码: 由于结果selectStatement是Next: 能否请一些人建议如何重写上面的代码
例如,JPA标准API可以在没有生成元模型的情况下使用。失去了类型安全性,但我可以在运行时仅使用反射来创建查询,而无需事先了解数据模型。我想以同样的方式使用Querydsl。我不关心类型安全问题,因为我不知道数据模型。 在我最近的项目中,我想使用Querydsl,主要是因为它构成了持久性之上的另一层。所以我希望可以在JPA、JDO、JDBC、Lucene、Hibernate Search、Mong
我在使用与Spring Data JPA集成的QueryDSL时遇到了一个奇怪的行为: 我在Project和Person之间有ManyToOne关系。如果我通过所有者ID(外键)获取属于用户的所有项目,一切都按预期工作: 生成的查询: 但是,假设我们想通过一个不是外键的字段(例如所有者的姓名)获取属于一个人的所有项目: 在这些情况下,表Person被不必要地连接了两次(请注意person1_和pe
我无法在eclipse中生成querydsl Q类。如果有人能提供帮助,我们将不胜感激。下面是我尝试过的方法和pom中的代码片段。xml文件 我复制了建议的插件设置位于这里: https://github.com/querydsl/apt-maven-plugin/wiki/m2e-usage M2E,并将maven生成的源文件夹作为eclipse源文件夹 我已经确保安装了Maven并更改了我的e
但是生成的SQL查询是 正如您所看到的,括号改变了,我相信两个查询中的条件并不相同。是虫子吗?使用hibernate和spring以及postgresql数据库。