hibernate映射,高手指点下...
我是按书上练习下Bag ..具体我也不知道是什么东西,有步骤,原代码。。现在出现好多异常 请大家帮帮忙。。现在在自己漫漫啃!!
我把代码帖出来 可能很多 ,不过我相信问题应该在映射那,但不会改。。希望大家帮我解决!谢谢
%%%% Error Creating SessionFactory %%%%org.hibernate.MappingException: Repeated column in mapping for entity: com.zzx.pojos.course column: cno (should be mapped with insert="false" update="false") at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:575) at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:597) at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:615) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:405) at org.hibernate.mapping.RootClass.validate(RootClass.java:192) at org.hibernate.cfg.Configuration.validate(Configuration.java:984) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1169) at com.zzx.hbm.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31) at com.zzx.test.BagTest.main(BagTest.java:17)%%%% Error Creating SessionFactory %%%%org.hibernate.MappingException: Could not read mappings from resource: com/zzx/pojos/course.hbm.xml at org.hibernate.cfg.Configuration.addResource(Configuration.java:485) at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390) at org.hibernate.cfg.Configuration.configure(Configuration.java:1310) at com.zzx.hbm.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:69) at com.zzx.hbm.HibernateSessionFactory.getSession(HibernateSessionFactory.java:53) at com.zzx.test.BagTest.main(BagTest.java:17)Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.zzx.pojos.course at org.hibernate.cfg.Mappings.addClass(Mappings.java:118) at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:154) at org.hibernate.cfg.Configuration.add(Configuration.java:386) at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427) at org.hibernate.cfg.Configuration.addResource(Configuration.java:482) ... 8 morejava.lang.NullPointerException at com.zzx.test.BagTest.main(BagTest.java:20)
drop database if exists joblog;create database joblog CHARSET=gbk;use joblog; drop table if exists student; create table student( id int unsigned not null auto_increment comment 'id', sno int unsigned not null default '0' comment '学号', sname varchar(45) default null comment '姓名', ssex char(2) default null COMMENT '性别', sdept varchar(10) DEFAULT null comment '部门', sage int unsigned default null comment '年龄', saddress varchar(45)default null comment '籍贯', primary key (id) )charset = gbk; drop table if exists course ; create table course( id int unsigned not null auto_increment comment 'id', cno int unsigned default null comment '课程号', cname varchar(45) default null comment '课程名', ccredit int unsigned null comment '学分', primary key (id) ) charset =gbk;
public class course implements java.io.Serializable { private Integer id; private Integer cno; private String cname; private Integer ccredit; private student stu;public class student implements java.io.Serializable { private Integer id; private Integer sno; private String sname; private String ssex; private String sdept; private Integer sage; private String saddress; private List course=new ArrayList();
<hibernate-mapping> <class name="com.zzx.pojos.course" table="course" catalog="joblog"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity"></generator> </id> <property name="cno" type="java.lang.Integer"> <column name="cno"> <comment>课程号</comment> </column> </property> <property name="cname" type="java.lang.String"> <column name="cname" length="45"> <comment>课程名</comment> </column> </property> <property name="ccredit" type="java.lang.Integer"> <column name="ccredit"> <comment>学分</comment> </column> </property> <many-to-one name="stu" column="cno" cascade="save-update" fetch="join" ></many-to-one> </class></hibernate-mapping>
<hibernate-mapping> <class name="com.zzx.pojos.student" table="student" catalog="joblog"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity"></generator> </id> <property name="sno" type="java.lang.Integer"> <column name="sno" not-null="true"> <comment>学号</comment> </column> </property> <property name="sname" type="java.lang.String"> <column name="sname" length="45"> <comment>姓名</comment> </column> </property> <property name="ssex" type="java.lang.String"> <column name="ssex" length="2"> <comment>性别</comment> </column> </property> <property name="sdept" type="java.lang.String"> <column name="sdept" length="10"> <comment>部门</comment> </column> </property> <property name="sage" type="java.lang.Integer"> <column name="sage"> <comment>年龄</comment> </column> </property> <property name="saddress" type="java.lang.String"> <column name="saddress" length="45"> <comment>籍贯</comment> </column> </property> <bag name="course" inverse="true" table="course" cascade="all"> <key> <column name="cno"></column> </key> <one-to-many class="com.zzx.pojos.course"/> </bag> </class></hibernate-mapping>
<key column="xxx"/>
<one-to-many class="xxx"/>
</set>
[解决办法]
照异常信息看说明你的 cascade="all" 的值不能为all .
你试着用save-update 或 其他看看。
[解决办法]
course.hbm.xml中
<many-to-one name="stu" column="cno" cascade="save-update" fetch="join" ></many-to-one>
该句的column属性是不是应该为student表的主键列?也就是column="id"?
两个表应该存在主外键关系吧...
[解决办法]
<many-to-one name="stu" column="cno" cascade="save-update" fetch="join" ></many-to-one>
删了
外键关联只需要在一端定义就可以了啊