【发布时间】:2010-02-24 08:46:00
【问题描述】:
我遇到了 Hibernate 的问题。
我目前的项目是一个小游戏。在这个游戏中,您有一个 Board,其中有许多 Fields,每个都有一个 Token。
我可以毫无问题地在空数据库上进行选择,但如果我将一个对象放入其中(保存工作没有任何异常,之后数据库值看起来不错)我会遇到异常。
Board 类中有趣的部分:
@OneToMany(fetch=FetchType.EAGER)
@MapKey(name = "point")
public Map<Point, Field> getGameMatrix() {
return gameMatrix;
}
我对获取板的查询:
return getHibernateTemplate().loadAll(Board.class);
日志现在出现了这个:
休眠:选择this_.id作为id0_2_, this_.uniqueClassName 为 uniqueCl3_0_2_, this_.borderDimension 作为borderDi4_0_2_,this_.dimension as 维度0_2_,this_.TYPE为TYPE0_2_, gamematrix2_.Board_id 作为 Board1_4_, field3_.id as gameMatrix2_4_,(选择 a11.point 来自字段 a11,其中 a11.id=gamematrix2_.gameMatrix_id) 为 公式0_4_,字段3_.id为id1_0_, field3_.point 为 point1_0_, field3_.token_id 作为 token3_1_0_, token4_.id 为 id2_1_,token4_.name 为 name2_1_, token4_.uniqueClassName 为 uniqueCl4_2_1_, token4_.TYPE 为 TYPE2_1_ from Board this_ 左外 加入 Board_Field gamematrix2_ on this_.id=gamematrix2_.Board_id 离开 外连接字段 field3_ on gamematrix2_.gameMatrix_id=field3_.id 左外连接 Token token4_ on field3_.token_id=token4_.id
直到那里看起来不错,但是 Hibernate 会执行以下操作:
Hibernate: delete from Board_Field where Board_id=?
Hibernate: insert into Board_Field (Board_id, gameMatrix_id) values (?, ?)
我得到了这个例外:
线程“AWT-EventQueue-0”中的异常 org.springframework.dao.InvalidDataAccessApiUsageException: 对象引用了一个未保存的瞬态 instance - 保存瞬态实例 冲水前:田间;嵌套的 例外是 org.hibernate.TransientObjectException: 对象引用了一个未保存的瞬态 instance - 保存瞬态实例 冲洗前:字段
我不明白为什么它会发出删除语句。
有什么想法吗?
谢谢
【问题讨论】:
-
之前的交易是否正常关闭?