编程语言
首页 > 编程语言> > Java QueryDsl用于“更新myTable所在的myColumn(‘有趣’,’值’)”?

Java QueryDsl用于“更新myTable所在的myColumn(‘有趣’,’值’)”?

作者:互联网

我正在尝试在QueryDsl中翻译此查询:

update myThings set firstColumn = 'newValue' where secondColumn in ('interesting', 'stuff')

我花了好几个小时寻找文档,但java fu在这一个中不够强大… :(我可以找到各种QueryDsl示例,但我找不到任何这个.我可能需要SimpleExpression.eqAny(CollectionExpression) ,但我无法弄清楚如何围绕我简单的字符串列表构建这样的CollectionExpression.

List<String> interestingValues = Arrays.asList("interesting", "stuff");

queryFactory.update(myThings)
    .set(myThings.firstColumn, "newValue")
//  .where(myThings.secondColumn.in(interestingValues)
//         'in' will probably try to look in table "interestingValues"?
//  .where(myThings.secondColumn.eqAny(interestingValues)
//         'eqAny' seems interesting, but doesn't accept a list
    .execute();

我所能找到的只是API定义,但后来我在泛型中迷失了任何其他“新”的java概念,我仍然难以理解.非常感谢一个例子.

解决方法:

你必须使用新的JPAUpdateClause(session,myThings):

JPAUpdateClause<myThings> update = new JPAUpdateClause(session, myThings);
update.set(myThings.firstColumn, "newValue")
      .where(myThings.secondColumn.in(interestingValues))
      .execute();

如果您正在使用休眠,请改用HibernateUpdateClause();

标签:querydsl,java
来源: https://codeday.me/bug/20190829/1761479.html