当前位置: 首页 > 知识库问答 >
问题:

使用SpringData和QueryDSL JPA查询映射值

欧阳英彦
2023-03-14

我得到了以下数据结构

@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”,则这是抱怨。有没有像出版一样的书,任何价值().name.等于伊朗的情况(“汉斯”)就像一个集合?

共有2个答案

澹台衡
2023-03-14

我想你错过了布尔建设者

在您的存储库中-试试这个

QPublication publication = QPublication.publication;
QAuthor author = QAuthor.author;
BooleanBuilder where= new BooleanBuilder();
where.and(publication.author.name.containsIgnoreCase(textToSearch));

//pass the where condition to the desired Repo method
repo.findAll(where);
杭胜
2023-03-14

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

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());
}
 类似资料:
  • 在mapper中,我调用了一个proc'xyz',它返回所查询的ProcessType表的行列表的光标。

  • 问题内容: 考虑表 这是使用查询生成的视图 我想为总销售额创建一个实体,但没有sql端的视图。 该实体将通过查询构造。我发现的最接近的东西是 this ,但是我无法使其工作。 即使我定义了加载器,hibernate也会查找实体表并在找不到时给出错误。如果我创建表,它不会从我定义的命名查询中加载实体,Hibernate会生成查询本身。 有没有一种方法可以使@Loader工作,或者有另一种我可以将查询

  • 我对是新手,这就是我要做的。基本上,目标是将数据从Excel加载到SQL Server。有两个列表,一个是键,另一个是值。如何调用这两个列表来运行批处理SQL语句? 这是我到目前为止所拥有的: > < li> 通过这样做,似乎Groovy会将整个列表视为一个大字符串。我可以将列表输出为字符串,并删除单引号,但这似乎并不酷。我们能参数化列表中的字段吗? 对于k列表,我是否需要对所有字段使用单引号,如

  • 我有两个表名称LeftTable和RightTable如下 左表 右表 现在,当我在某种条件下离开join时,输出将如下所示 结果表 这个左连接帮助我在应用程序中实现一对多关系。 左连接条件在我的应用程序中是动态的。这只是我在这里展示的一个例子。假设上例中的左连接条件是LeftTable。淫秽的 如上所述,一对一的输出如下 我通过两种方式实现了这一功能: 使用游标 使用选择查询一个接一个地获取记录

  • 我正在测试返回地图的控制器 测试: 我应该使用哪个表达式从映射中读取键和值? 编辑:解决这个问题的方法可能是: 然后循环通过地图检查值。但是,有没有一种方法可以使用<code>jsonPath</code>来实现这一点?