Item和Subitem是一对多关系
Item.hbm.xml<hibernate-mapping>
<class name="com.hibernate3.pojo.Item" table="item" catalog="mybbs">
<id name="itemid" type="java.lang.Integer">
<column name="itemid" />
<generator class="increment" />
</id>
<property name="itemname" type="java.lang.String">
<column name="itemname" length="50" not-null="true" />
</property>
<property name="itemcode" type="java.lang.String">
<column name="itemcode" length="50" not-null="true" />
</property>
<set name="subitems" table="subitem" inverse="false" cascade="all">
<key column="itemid"/>
<one-to-many class="com.hibernate3.pojo.Subitem"/>
</set>
</class>
</hibernate-mapping>
Subitem.hbm.xml
<hibernate-mapping>
<class name="com.hibernate3.pojo.Subitem" table="subitem" catalog="mybbs">
<id name="subid" type="java.lang.Integer">
<column name="subid" />
<generator class="increment"/>
</id>
<property name="subname" type="java.lang.String">
<column name="subname" length="50" not-null="true" />
</property>
<property name="subcode" type="java.lang.Integer">
<column name="subcode" not-null="true" />
</property>
<many-to-one name="item" column="itemid" class="com.hibernate3.pojo.Item" fetch="select" />
</class>
</hibernate-mapping>
Session s=HibernateSessionFactory.getSession();
Transaction t=s.beginTransaction();
//Item item=(Item)s.get(Item.class, 1);//根据主键从数据库获取Item对象
Item item=new Item();//自己生成Item对象
//item.setItemid(1);
item.setItemname("department");
item.setItemcode("1");
Subitem subitem1=new Subitem();
subitem1.setSubname("et");
subitem1.setSubcode(2);
Subitem subitem2=new Subitem();
subitem2.setSubname("ecnomic");
subitem2.setSubcode(3);
Subitem subitem3=new Subitem();
subitem3.setSubname("manager");
subitem3.setSubcode(3);
Set subitems=new HashSet();
subitems.add(subitem1);
subitems.add(subitem2);
subitems.add(subitem3);
//System.out.println(subitems.size());
System.out.println(item.getItemid()+" "+item.getItemname());
item.setSubitems(subitems);
s.save(item);
t.commit();
s.close();
Hibernate: select max(itemid) from item
Hibernate: select max(subid) from subitem
Hibernate: insert into mybbs.item (itemname, itemcode, itemid) values (?, ?, ?)
Hibernate: insert into mybbs.subitem (subname, subcode, itemid, subid) values (?, ?, ?, ?)
Hibernate: insert into mybbs.subitem (subname, subcode, itemid, subid) values (?, ?, ?, ?)
Hibernate: insert into mybbs.subitem (subname, subcode, itemid, subid) values (?, ?, ?, ?)
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
.....
Caused by: java.sql.BatchUpdateException: Column 'itemid' cannot be null
请指点一下错在哪?主键是怎样生成的?
Item.hbm.xml<hibernate-mapping>
<class name="com.hibernate3.pojo.Item" table="item" catalog="mybbs">
<id name="itemid" type="java.lang.Integer">
<column name="itemid" />
<generator class="increment" />
</id>
<property name="itemname" type="java.lang.String">
<column name="itemname" length="50" not-null="true" />
</property>
<property name="itemcode" type="java.lang.String">
<column name="itemcode" length="50" not-null="true" />
</property>
<set name="subitems" table="subitem" inverse="false" cascade="all">
<key column="itemid"/>
<one-to-many class="com.hibernate3.pojo.Subitem"/>
</set>
</class>
</hibernate-mapping>
Subitem.hbm.xml
<hibernate-mapping>
<class name="com.hibernate3.pojo.Subitem" table="subitem" catalog="mybbs">
<id name="subid" type="java.lang.Integer">
<column name="subid" />
<generator class="increment"/>
</id>
<property name="subname" type="java.lang.String">
<column name="subname" length="50" not-null="true" />
</property>
<property name="subcode" type="java.lang.Integer">
<column name="subcode" not-null="true" />
</property>
<many-to-one name="item" column="itemid" class="com.hibernate3.pojo.Item" fetch="select" />
</class>
</hibernate-mapping>
Session s=HibernateSessionFactory.getSession();
Transaction t=s.beginTransaction();
//Item item=(Item)s.get(Item.class, 1);//根据主键从数据库获取Item对象
Item item=new Item();//自己生成Item对象
//item.setItemid(1);
item.setItemname("department");
item.setItemcode("1");
Subitem subitem1=new Subitem();
subitem1.setSubname("et");
subitem1.setSubcode(2);
Subitem subitem2=new Subitem();
subitem2.setSubname("ecnomic");
subitem2.setSubcode(3);
Subitem subitem3=new Subitem();
subitem3.setSubname("manager");
subitem3.setSubcode(3);
Set subitems=new HashSet();
subitems.add(subitem1);
subitems.add(subitem2);
subitems.add(subitem3);
//System.out.println(subitems.size());
System.out.println(item.getItemid()+" "+item.getItemname());
item.setSubitems(subitems);
s.save(item);
t.commit();
s.close();
Hibernate: select max(itemid) from item
Hibernate: select max(subid) from subitem
Hibernate: insert into mybbs.item (itemname, itemcode, itemid) values (?, ?, ?)
Hibernate: insert into mybbs.subitem (subname, subcode, itemid, subid) values (?, ?, ?, ?)
Hibernate: insert into mybbs.subitem (subname, subcode, itemid, subid) values (?, ?, ?, ?)
Hibernate: insert into mybbs.subitem (subname, subcode, itemid, subid) values (?, ?, ?, ?)
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
.....
Caused by: java.sql.BatchUpdateException: Column 'itemid' cannot be null
请指点一下错在哪?主键是怎样生成的?
解决方案 »
- 问一个访问地址如何根据参数动态进入方法
- 求教各位ibatis"数据大小超出此类型的最大值"的异常,内详~
- 急!!!spring+hibernate的问题
- 求SSH分页程序。
- jboss rules的Decision tables问题
- java sql 的Statement对像的重用问题
- 大家怎么理解Struts的
- MS JDBC无法读取BLOB fields
- jb7+sql server2000+ weblogic7出现weblogic/version 错误??
- 抽象类实现接口,怎么在抽象类中注入DAO层?
- 急、急、急、十万火急!!!!窗口之间传值。。。。。。。。。。
- 寻求ssh整合成功案例源代码
试试
subitem2.setItem(item);
subitem3.setItem(item);
让subitem获得Item的字段
但是不清楚的是通过item.hbm.xml的配置
<set name="subitems" table="subitem" inverse="false" cascade="all">
<key column="itemid"/>
<one-to-many class="com.hibernate3.pojo.Subitem"/>
</set>
inverse=false,是否item表会自己把它的id通过hibernate传给subitem?
我这里出错是不是因为设置了双向关联?
<set name="subitems" table="subitem" inverse="false" cascade="all"> <!--应该是这里出了问题,怎么又多出个table??这是表明第3张表,应该是calss吧??-->
<key column="itemid"/>
<one-to-many class="com.hibernate3.pojo.Subitem"/>
</set>