JPA / JPQL - 批量更新

时间:2011-03-03 08:50:58

标签: jpa jpql

我必须在表上执行批量更新。 举个简单的例子:

 UPDATE Book b SET b.amount = b.amount + 1 WHERE b IN ( :books )

问题是b.amount可以是或者是NULL值或者是int,如果有一个NULL值,它应该表现为b.amount将等于1.

JPA / JPQL中是否有任何“强制转换”或任何其他解决此问题的方法,

提前谢谢你,

此致 P

3 个答案:

答案 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);