HSQL 中的 GenericJDBCException

Posted

技术标签:

【中文标题】HSQL 中的 GenericJDBCException【英文标题】:GenericJDBCException in HSQL 【发布时间】:2011-09-23 09:14:42 【问题描述】:

我有一个名为ProdTransaction 的实体。我正在保存两条ProdTransaction 类型的记录。两个插入都在独立运行时成功。我是说

tranDAO.save(record1) //alone works
tranDAO.save(record2) //alone works

但一起运行它们

tranDAO.save(record1)
tranDAO.save(record2)

HSQL 抛出 GenericJDBCException 错误。

@Entity
@Table(name = "ProdTransaction")
public class ProdTransactionextends PersistentObject implements Serializable 
private static final long serialVersionUID = 1L;

@Embedded
private ProdTranPK id;

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name = "REC_ID")
private Long recId;

@Temporal(TemporalType.DATE)
private Date date1;

@Column(length = 1)
private String comment;

我已经验证了数据,一切都很好。当我运行 HSQL 时,我得到:

GenericJDBCException:无法执行 JDBC 批量更新。

但是,如果我连接到我的物理数据库,并以相同的顺序运行,它就可以正常工作。 HSQL 中可能有什么问题?我使用的是 1.8 版。

【问题讨论】:

HSQLDB 确实支持批处理。尝试在每个语句之后添加刷新。还添加日志记录以查看将要发送到 HSQLDB 的确切 SQL 并将其直接复制粘贴到 HSQLDB 服务器中。 【参考方案1】:

HSQLDB 批处理错误已修复,现在可以正常工作了。问题是如果你有一个错误,比如你的 SQL 语句有问题等,你只会得到一个一般的异常,它并没有真正告诉你任何事情。我喜欢做的是有一个帮助类,它可以在批处理模式下单独执行 SQL 查询,当我从批处理模式收到奇怪的错误时,我会切换到单独的查询。试试看,也许这只是你的SQL中的一个简单错误

【讨论】:

【参考方案2】:

也可以disable batching in hibernate。在休眠会话配置中,设置:

hibernate.jdbc.factory_class=org.hibernate.jdbc.NonBatchingBatcherFactory 

【讨论】:

以上是关于HSQL 中的 GenericJDBCException的主要内容,如果未能解决你的问题,请参考以下文章

HSQL 中的大写

在 hsql 中的 blob 中搜索文本

HSQL 中的 GenericJDBCException

HSQL - 意外的令牌:语句中的 PROCEDURE

从列中的最大 id 创建 HSQL 序列

如何从hsql中的序列中获取下一个10个值