2016-08-01 45 views
0

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)) 

讓我知道如果我失去了一些東西。

+0

您的代碼應該正常工作。你使用的是哪個版本的HSQLDB和Hibernate?另外,您可以爲org.hibernate啓用DEBUG日誌記錄,並查找Api模型的「CREATE TABLE」語句嗎?您應該看到該列是使用「身份」創建的 - 如果沒有,那就是您的問題。 –

+0

嗨..感謝您的回覆..我的休眠版本是4.3.6.Final和HSQLDB版本是2.2.8。我已經在上面的問題中添加了create table語句,並且我可以看到該表是用身份生成的。仍然存在這個問題。 –

回答