【发布时间】:2013-12-11 08:34:40
【问题描述】:
我遇到了 Hibernate 4.2.7.SP1 的问题,我不知道是误用还是错误。 我正在使用带注释的休眠,我的代码类似于这两个对象:
第一个对象:
@Entity
@Table(name = "TABLE1")
public class FirstObject {
@Id
@GeneratedValue
private Long id; // database id
private SecondOBject secondObject
//Getters, setters and other stuff here.
}
第二个对象:
@Entity
@Table(name = "TABLE2")
public class SecondObject {
@Id
@GeneratedValue
private Long id; // database id.
@ElementCollection
@CollectionTable(name = "T_MAPTABLE")
private Map<String, Integer> iAmAHashmap;
//More maps similar to the previous one, the getters, setters and other stuff.
}
当然很多代码都被省略了,因为我认为这与问题无关。
当我执行测试时,我使用“SecondObject”创建了一个对象“FirstObject”并尝试使用 hibernate 将其持久化,我可以看到 hibernate 正在生成此 sql 代码:
Hibernate:
insert
into
TABLE2
values
( )
如您所见,没有参数,也没有值。因此,启动了一个异常:
SqlExceptionHelper [main] - [SQLITE_ERROR] SQL error or missing database (near ")": syntax error)
SecondObject 中的地图有值(我已经打印了地图的大小以确保)。但是Hibernate不存储它,并尝试将空参数存储在TABLE2中。
但是,如果我更改 SecondObject 并添加任何参数(即字符串):
@Entity
@Table(name = "TABLE2")
public class SecondObject {
@Id
@GeneratedValue
private Long id; // database id.
private String dummyText="hello!";
@ElementCollection
@CollectionTable(name = "MAPTABLE")
private Map<String, Integer> iAmAHashmap;
//More maps similar to the previous one, the getters, setters and other stuff.
}
Hibernate生成的代码是:
Hibernate:
insert
into
TABLE2
(dummyText)
values
(?)
至少,没有显示错误(但显然地图没有插入)。
我的 hibernate.cfg.xml 中有:
....
<property name="hibernate.hbm2ddl.auto">create-drop</property>
....
并且 MAPTABLE 是在执行测试时自动创建的。
那我有两个问题:
为什么 hibernate 试图在没有参数和值的情况下执行查询? 为什么我的地图没有插入? (我在所有只有地图而没有其他参数的类中都有这个错误)。
【问题讨论】:
-
啊!我正在尝试在 SQLite 数据库中持久化...