您的位置:首页 > 其它

初识Hibernate:Could not instantiate id generator [entity-name=com.hibernate.e

2017-06-13 10:02 483 查看
最近刚刚学 Hibernate 然后就遇到了错误,抓破了脑壳都不知道为什么,第二天又看了一遍代码,原来是我写错了单词

       <id name="deptNo" type="java.lang.Byte">

            <column name="deptno"/>

            <generator class="assigned"/>  //这个地方要注意,别写错

        </id>

org.hibernate.MappingException: Could not instantiate id generator [entity-name=com.xxx.xxx.xxx.Dept]     at org.hibernate.id.factory.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:118)
    at org.hi

源代码如下:

hibernate.cfg.xml-------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>e.entity.Dept" table="dept" schema
<class name="com.xxx.hibernat="SCOTT">
<id name="deptNo" type="java.lang.Byte">
<column name="deptno"/>
<!--
主键生成策略:
increment:自动增
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1 数据库的连接字符串 -->
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<!-- 2 登陆数据库的用户名 -->
<property name="connection.username">scott</property>
<!-- 3 登陆数据库的密码 -->
<property name="connection.password">scott</property>
<!-- 4 连接数据库的驱动类 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 5 数据库方言 -->
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<!-- 6  运行的时候显示sql语句-->
<property name="show_sql">true</property>
<!-- 7 格式化sql语句-->
<property name="format_sql">true</property>
<!-- 8 和当前线程绑定在一起 -->
<property name="current_session_context_class">thread</property>

<!-- 注册映射文件 -->
<!-- /hiberate-chap1/src/com/xxx/hibernate/entity/Dept.hbm.xml -->
<mapping resource="com/xxx/hibernate/entity/Dept.hbm.xml"/>
</session-factory>
</hibernate-configuration>


长;assigned:程序提供;native:由程序自己判断是程序提供主键值还是由数据库生成主键identity:使用数据的自动增长;

如mysql的auto_increment,sqlserver的identity(标识列)sequence:使用序列;如Oracle,比如Oracle数据库有有一个名为:seq_dept的序列,

那么在此处配置为:<generator class="sequence"><param name="sequence">seq_dept</param></generator> --><generator class="assigned"/></id>

<!-- property元素中的name属性值是实体类中的属性名称,type的属性值指的是实体类中对应属性的数据类型,column的属性值指的是数据库中表对应的列名 -->

<property name="deptName" type="java.lang.String" column="dname"/>

<property name="location" type="java.lang.String"><column name="loc"/>

</property></class></hibernate-mapping>


Dept.hbm.xml-------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.XXX.hibernate.entity.Dept" table="dept" schema="SCOTT">
<id name="deptNo" type="java.lang.Byte">
<column name="deptno"/>
<!--
主键生成策略:
increment:自动增长;
assigned:程序提供;
native:由程序自己判断是程序提供主键值还是由数据库生成主键
identity:使用数据的自动增长;如mysql的auto_increment,sqlserver的identity(标识列)
sequence:使用序列;如Oracle,比如Oracle数据库有有一个名为:seq_dept的序列,那么在此处配置为:
<generator class="sequence">
<param name="sequence">seq_dept</param>
</generator>
-->
<generator class="assigned"/>
</id>
<!--
property元素中的name属性值是实体类中的属性名称,
type的属性值指的是实体类中对应属性的数据类型,
column的属性值指的是数据库中表对应的列名
-->
<property name="deptName" type="java.lang.String" column="dname"/>
<property name="location" type="java.lang.String">
<column name="loc"/>
</property>
</class>
</hibernate-mapping>
原创作品:转摘请注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate
相关文章推荐