休眠Junit hsqldb - (策略= GenerationType.AUTO)不起作用
问题描述:
My Dao层与MySql一起工作良好。当我尝试单元测试与内存数据库(HSQLDB)相同时,我无法保存数据。我的实体定义如下休眠Junit hsqldb - (策略= GenerationType.AUTO)不起作用
public class Api {
@Id
@Column(name = "api_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private int apiId;
当试图持续存在时,ID不会自动生成。它作为null传递。
18:05:52.071 [main] DEBUG org.hibernate.SQL - insert into api (api_id, description, version) values (null, ?, ?)
18:05:52.076 [main] DEBUG o.h.e.jdbc.spi.SqlExceptionHelper - could not prepare statement [insert into api (api_id, description, name) values (null, ?, ?)]
我的休眠特性
Properties properties = new Properties();
properties.setProperty(ApiConstants.HIBERNATE_DIALECT, "org.hibernate.dialect.HSQLDialect");
properties.setProperty(ApiConstants.HIBERNATE_DRIVER_CLASS, "org.hsqldb.jdbcDriver");
properties.setProperty(ApiConstants.HIBERNATE_CONN_URL, "jdbc:hsqldb:mem:apicloud");
properties.setProperty(ApiConstants.HIBERNATE_CONN_USER, "sa");
properties.setProperty(ApiConstants.HIBERNATE_CONN_PWD, "");
properties.setProperty("hibernate.archive.autodetection", "class,hbm");
properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
properties.setProperty("hibernate.show_sql", "true");
模式创建的每个单元测试被触发的时间。创建语句发布如下。
18:05:51.995 [main] DEBUG org.hibernate.SQL - create table api
(api_id integer generated by default as identity (start with 1),
description varchar(255), version varchar(255), primary key (api_id))
让我知道如果我失去了一些东西。
答
当我将HSQLDB版本更新到2.2.9时,问题就解决了。
https://forum.hibernate.org/viewtopic.php?f=1&t=1043498&p=2490106#p2490106
普拉迪普。
您的代码应该正常工作。你使用的是哪个版本的HSQLDB和Hibernate?另外,您可以为org.hibernate启用DEBUG日志记录,并查找Api模型的“CREATE TABLE”语句吗?您应该看到该列是使用“身份”创建的 - 如果没有,那就是您的问题。 –
嗨..感谢您的回复..我的休眠版本是4.3.6.Final和HSQLDB版本是2.2.8。我已经在上面的问题中添加了create table语句,并且我可以看到该表是用身份生成的。仍然存在这个问题。 –