Hibernate 新手问题
我有1个双向1-N关系,1个user对应N个artical我在user.hbm.xml中配置是这样的
<set name="artical" inverse="true" cascade="all">
<key column="id_user"></key>
<one-to-many class="Artical"/>
</set>
然后main方法中
//各种set
Transaction t = session.beginTransaction();
session.save(user);
t.commit();
我以为应该不会有错,保存user之前会先自动保存artical,因为cascade。
实际上控制台
Hibernate: insert into User (name, password, email, isAdmin) values (?, ?, ?, ?)
Hibernate: update Artical set title=?, id_user=?, time=?, content=?, isPublic=? where id_artical=?
Exception in thread "main"
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:81)
............................
我的问题:我设置了cascade=all, inverse=trueHibernate在插入user前应该会先做select语句,查看artical有没有存在,不存在的话应该还要insert artical而且inverse=true,应该是不会触发update语句的。不知道为什么Hibernate既没有insert artical又做了update?
另外....数据库是空的,表都是新建的,不会有任何持久化对象在里面。
------解决方案--------------------我整理的课件 自己对比吧
一对多 一 <class name="bean.Dept" table="dept" catalog="etoak">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="32" />
</property>
<set name="emps" inverse="false" lazy="false" cascade="all">
<key>
<column name="did"></column>
</key>
<one-to-many class="bean.Emp" />
</set>
</class>
//inverse="false" 默认为false 表示对方维护,true表示自己维护
//但是在多表的里要加上 Dep