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