求救:加了前缀属性就无法运行

来源:2-2 hibernate常用配置

xiele

2015-09-07 10:23


http://img.mukewang.com/55ecf45700013b8806840323.jpg

上面是我的代码

加了前缀属性就无法运行,注释掉就正常

我是跟着老师的视频走的,其他代码一致

求大神拯救


ps:加了前缀属性后

最后给一个

ERROR: HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: null id in pojo.Student entry (don't flush the Session after an exception occurs)

啥意思?

我手动设置id=1不行,id为null不行,不设置id也不行

不要前缀属性就咋都行(设置id没有用,自动增长的)


package pojo;

import java.util.Date;

public class Student implements java.io.Serializable {

	// Fields

	private int id;
	private String name;
	private String gender;
	private Date birthday;
	private String address;

	// Constructors

	/** default constructor */
	public Student() {
	}

	/** full constructor */
	public Student(String name, String gender, Date birthday, String address) {
		this.name = name;
		this.gender = gender;
		this.birthday = birthday;
		this.address = address;
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return this.gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public Date getBirthday() {
		return this.birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", gender=" + gender
				+ ", birthday=" + birthday + ", address=" + address + "]";
	}
	
	
}

上面是类
下面是映射

<?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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="pojo.Student" table="student" catalog="xiele007">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="16" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="gender" length="32" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="birthday" length="10" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="address" />
        </property>
    </class>
</hibernate-mapping>


写回答 关注

4回答

  • qq_云在风中_0
    2016-05-31 20:17:47
    已采纳

     你这个问题过去好久了,是因为你的主键生成方式有问题,Studen的MAP里面有一句

    <hibernate-mapping>
        <class name="pojo.Student" table="student" catalog="xiele007">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="native" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="16" />
            </property>
            <property name="gender" type="java.lang.String">
                <column name="gender" length="32" />
            </property>
            <property name="birthday" type="java.util.Date">
                <column name="birthday" length="10" />
            </property>
            <property name="address" type="java.lang.String">
                <column name="address" />
            </property>
        </class>
    </hibernate-mapping>

    <generator class="native" />换成 <generator class="assigned" />就可以了

    -----Hibernate 的<generator class="native"></generator>的不同属性含义------

    1) assigned
    主键由外部程序负责生成,无需Hibernate参与。

    2) hilo
    通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主
    键生成历史状态。

    3) seqhilo
    与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史
    状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

    4) increment
    主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持
    一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
    将此值加1作为主键。
    这种方式可能产生的问题是:如果当前有多个实例访问同一个数据
    库,那么由于各个实例各自维护主键状态,不同实例可能生成同样
    的主键,从而造成主键重复异常。因此,如果同一数据库有多个实
    例访问,此方式必须避免使用。

    5) identity
    采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL
    中的主键生成机制。

    6) sequence
    采用数据库提供的sequence 机制生成主键。如Oralce 中的
    Sequence。

    7) native
    由Hibernate根据底层数据库自行判断采用identity、hilo、sequence
    其中一种作为主键生成方式。

    8) uuid.hex
    由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后
    以长度32 的字符串表示)作为主键。

    9) uuid.string
    与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些
    数据库中可能出现问题(如PostgreSQL)。

    10) foreign
    使用外部表的字段作为主键。
    一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适
    应性。

    xiele

    非常感谢!

    2016-09-19 08:46:58

    共 1 条回复 >

  • 藏鱼心间
    2016-05-17 21:48:10

    同求,一样的问题

    WiKim

    如果你的xxx.cfg.xml文件中的属性是<generator class="native" />的话,需要换成 <generator class="assigned" />。另外,添加前缀的值是数据库的名称。

    2016-10-08 22:52:09

    共 2 条回复 >

  • 激流勇进__
    2016-02-20 14:45:01

    你那个添加前缀的那个语句可能一定要加hibernate吧,不能用xxxx表示。因为添加前缀的这个前缀是数据库的前缀。

  • 咫尺天涯01
    2015-09-07 12:24:05

    你的pojo类呢   让我看下

    xiele

    我把类和映射代码放上面了 帮我看下

    2015-09-07 16:42:28

    共 1 条回复 >

Hibernate初探之单表映射

Java持久化框架Hibernate入门教程,掌握Hibernate基本概念

74810 学习 · 793 问题

查看课程

相似问题