为了账号安全,请及时绑定邮箱和手机立即绑定

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


http://img1.sycdn.imooc.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>


正在回答

6 回答

 你这个问题过去好久了,是因为你的主键生成方式有问题,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方式生成主键将提供最好的性能和数据库平台适
应性。

1 回复 有任何疑惑可以回复我~
#1

xiele 提问者

非常感谢!
2016-09-19 回复 有任何疑惑可以回复我~

同求,一样的问题

0 回复 有任何疑惑可以回复我~
#1

qq_云在风中_0

已经有答案了,你自己看看吧
2016-05-31 回复 有任何疑惑可以回复我~
#2

WiKim

如果你的xxx.cfg.xml文件中的属性是<generator class="native" />的话,需要换成 <generator class="assigned" />。另外,添加前缀的值是数据库的名称。
2016-10-08 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

你的pojo类呢   让我看下

0 回复 有任何疑惑可以回复我~
#1

xiele 提问者

我把类和映射代码放上面了 帮我看下
2015-09-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信