日期:2014-05-20  浏览次数:20572 次

刚学hibernate,请高手帮看下这个程序,错误在哪里?找了半天。谢谢!
Clazz.hbm.xml;

<hibernate-mapping 
package="com.hib.entity">
<class name="Clazz" table="clazz">
<id name="id" type="java.lang.Long">
<column name="ID"></column>
<generator class="native"/>
</id>
<property name="name" type="java.lang.String"></property>
<property name="studentCount" type="java.lang.Integer">
<column name="student_count"></column>
</property>
<property name="remark" type="java.lang.String"></property>

<set name="students" table="student" inverse="true" fetch="join" cascade="save-update">
<key column="clazzID"></key>
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
Student.hbm.xml
<hibernate-mapping 
package="com.hib.entity">
<class name="Student" table="student">
<id name="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property name="sid" type="java.lang.Integer"></property>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
<property name="sex" type="java.lang.Integer"></property>
<many-to-one name="clazz" class="Clazz" cascade="all">
<column name="clazzID"></column>
</many-to-one>  
</class>
</hibernate-mapping>

hibernate.cfg.xml;

  <mapping resource="com/hib/entity/Clazz.hbm.xml"/>
  
  <mapping resource="com/hib/entity/Student.hbm.xml"/>

------解决方案--------------------
楼主的数据库 是什么类型的数据库啊

1.如果是ORACLE native默认为主键生成方式为sequece 那么你要在数据库里创建sequece .

<generator > 
......
<param name="sequence">xxxxx(你创建的sequence名字)</param>///加上这句

</generator>

2.如果是Mysql native默认为主键生成方式为auto increment 。你创建这张表的时候 主键勾选auto increment 选项就可以了。这个好办

这都是主键生成策略问题。楼主要留意了!!!!!!!!!!!
------解决方案--------------------
你用的是什么数据库呀
<generator class="native"/> 
表明主键有数据库生成
看看你数据库中的主键是不是标示列
------解决方案--------------------
你的Clazz.hbm.xml 如果是用工具映射的应该不会有问题,你这个错误应该是启动工程的时候出的吧,这个时候WEB服务器只是在加载配置文件,并没有和数据库进行交互。楼上说的问题的错误应该是提示没有找到sequece 错误,而不是这个。
楼主你这个错误应该是hibernate.cfg.xml的错误,里边应该是加载多了
<mapping resource="com/hib/entity/Student.hbm.xml"/>就是这些,你仔细找一下,所有的mapping resource标签对应的xml文件,应该有缺的,意思就是,你的mapping resource标签里肯定的有错误,不管是哪个有错误,都会报第一个错误。也是就你最上边的
<mapping resource="com/hib/entity/Clazz.hbm.xml"/>报他有错误,其实是别的mapping resource错了。
我通常出现这种情况是hibernate.cfg.xml里映射了一张表,但是其实在该路径下并没有那个xml文件,经常有人上传了hibernate.cfg.xml却忘了上传数据库表的xml。所以楼主你就一个一个找吧,或者你把其他的都去掉
只留一个<mapping resource="com/hib/entity/Clazz.hbm.xml"/>就应该不会报错了