我需要对一张表进行批量更新。 举个快速的例子:
UPDATE Book b SET b.amount = b.amount + 1 WHERE b IN ( :books )
问题在于b.amount可能是NULL值或整数,如果有NULL值,它应该被视为b.amount等于1。
在JPA / JPQL中是否有任何“强制转换”或其他解决此问题的方法,
提前致谢,
问候, P
您应该能够使用COALESCE
:
UPDATE Book b SET b.amount = COALESCE(b.amount, 1) + 1 WHERE b IN ( :books )
我会先用单独的查询去修复空值:
UPDATE Book set b.amount = 0 WHERE b.amount IS NULL
同时,确保无法插入null
,如果它不是您逻辑上的合法值。例如,使用@Column(nullable=false)
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);