我必须在表上执行批量更新。 举个简单的例子:
UPDATE Book b SET b.amount = b.amount + 1 WHERE b IN ( :books )
问题是b.amount可以是或者是NULL值或者是int,如果有一个NULL值,它应该表现为b.amount将等于1.
JPA / JPQL中是否有任何“强制转换”或任何其他解决此问题的方法,
提前谢谢你,
此致 P
答案 0 :(得分:7)
您应该可以使用COALESCE
:
UPDATE Book b SET b.amount = COALESCE(b.amount, 1) + 1 WHERE b IN ( :books )
答案 1 :(得分:1)
我会首先使用单独的查询修复空值:
UPDATE Book set b.amount = 0 WHERE b.amount IS NULL
如果它不是您逻辑的合法值,也会导致无法插入null
。例如,有@Column(nullable=false)
答案 2 :(得分:0)
我使用以下方法从当前的JPA提供程序获取JDBC连接。
SessionImplementor si = (SessionImplementor) em.unwrap(Session.class);
Connection connection = si.getJdbcConnectionAccess().obtainConnection();
PreparedStatement pstmt = connection.prepareStatement("...");
// Do something
pstmt.addBatch();
pstmt.executeBatch();
si.getJdbcConnectionAccess().releaseConnection(connection);