我的主要问题是:
--------------------------------------------------------------
执行的SQL竟然是:
...
Hibernate: update TYPE set DICTIONARYID=? where ID=?
...
而不是:
...
Hibernate: insert TYPE (?) values (?)
...这是怎么回事呢?
-------------------------------------------------------------
--------------------------------------------------------------
执行的SQL竟然是:
...
Hibernate: update TYPE set DICTIONARYID=? where ID=?
...
而不是:
...
Hibernate: insert TYPE (?) values (?)
...这是怎么回事呢?
-------------------------------------------------------------
解决方案 »
- 急急急!
- jboss启动报错
- 一个关于JDBC和JMS使用JTA的问题
- ---======求教:struts1.x 插入操作,产生重复ID======---
- JSP写的购物车
- struts 连接不上Access???
- StrutsTestCase调试spring出错了。救命啊。
- 用contains老找不到对象
- hibernate 在select 中怎样表达乘除这样的运算呢?
- 依赖注入的实现方法
- net.sf.hibernate.MappingException: Resource: net/sf/hibernate/example/quickstart/Cat.hbm.xml not found
- 请教利用James做邮件服务器的邮件收发软件的服务器管理解决方案
具体如下:
------------------------------------
<hibernate-mapping>
<class name="com.sztoilet.domainObject.Common" table="COMMON">
<id name="id" column="ID" unsaved-value="-1" >
<generator class="increment" />
</id> //父亲
<joined-subclass name="Father" table="FATHER">
<key column="ID" />
<bag name="childList" table="CHILD" cascade="none" lazy="false" inverse="false">
<key column="FATHERID" />
<one-to-many class="Child />
</bag>
</joined-subclass> //孩子
<joined-subclass name="Child" table="CHILD">
<key column="ID" />
<many-to-one name="father" column="FATHERID" class="Father" />
</joined-subclass> </class>
</hibernate-mapping>然后执行:
Child child = new Child(); //创建一个儿子
father.getChildList().add( child ); //指定父亲新增一个创建的儿子
生成的SQL语句只有 update ... 没有 insert ...为什么????????????????
出现这个问题就是hibernate以为已经存在了所以就用update。
尝试改变初始值为0,但结果一样。
郁闷~~~????
显式的使用session.save()或者session.update()操作一个对象的时候,实际上是用不到unsaved-value的。某些情况下(父子表关联保存),当你在程序中并没有显式的使用save或者update一个持久对象,那么Hibernate需要判断被操作的对象究竟是一个已经持久化过的持久对象PO,是一个尚未被持久化过的内存临时对象VO。
Hibernate如何判断究竟对child是save还是update呢?它会取一下child的主键属性 child.getId() ,如果取到的Id值和hbm映射文件中指定的unsave-value相等,那么Hibernate认为child是新的内存临时对象,发送save,如果不相等,那么Hibernate认为child是已经持久过的对象,发送update。