gpt4 book ai didi

java - 使用 SpringData 和 QueryDSL-JPA 查询映射值

转载 作者:行者123 更新时间:2023-12-02 12:35:55 24 4
gpt4 key购买 nike

我得到了以下数据结构

@Entity
public class Publication {
private Map<Integer, Author> authors;
// more stuff
}

@Entity
public class Author {
private String name;
// more stuff
}

我正在寻找一个查询 dsl 谓词,它可以提供我的所有出版物,其中任何 Author.name 都包含某个字符串,例如“汉斯”

我尝试过:

QPublication publication = QPublication.publication;
QAuthor author = QAuthor.author;
publication.authors.containsValue(JPAExpressions.selectFrom(author).where(author.lastName.containsIgnoreCase("Hans")));

但是,如果有多个作者的名字中包含“Hans”,则会出现问题。是否有像 Set 那样的 publication.authors.anyValue().name.equalsIgrnoreCase("Hans") 之类的内容?

最佳答案

我找到了一个带有联接和自定义存储库实现的解决方案:

public class PublicationRepositoryImpl extends QueryDslRepositorySupport 
implements PublicationRepositoryCustom {

@Override
public Page<Publication> findByAnyAuthorName(String name, PageRequest pageRequest) {
QPublication publication = QPublication.publication;
JPQLQuery<Publication> query = from(publication);
QAuthor author = QAuthor.author;
query.join(publication.authors, author);
query.where(author.name.containsIgnoreCase(name);
JPQLQuery<Publication> pagedQuery = getQuerydsl()
.applyPagination(pageRequest, query);

return PageableExecutionUtils.getPage(pagedQuery.fetch(), pageRequest,
() -> query.fetchCount());
}

关于java - 使用 SpringData 和 QueryDSL-JPA 查询映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146011/

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