鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > erlang > >

Hibernate中Caused by: java.sql.SQLException: Field 'a

来源:互联网 作者:佚名 时间:2016-05-12 15:58
在学习Hibernate中,相信很多人都遇到过: Exception in thread main org.hibernate.exception.GenericJDBCException: could not execute statement Caused by: java.sql.SQLException: Field 'address_id' doesn't have a default value 很是纳闷,明明我的

在学习Hibernate中,相信很多人都遇到过:

Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute statement
Caused by: java.sql.SQLException: Field 'address_id' doesn't have a default value

很是纳闷,明明我的address_id是主键,为毛还提示我不存在默认值?主键不是应该自动生成值的吗?

解决是一方面,知道为什么报错才是最重要的。

错误原因:

以下拿我这个错误来讲(address_id)如图:

import java.util.HashSet;
import java.util.Set;

import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Table;
@Entity
@Table(name="personSet_inf")
public class PersonSet {
	@Id
	@Column(name="person_id")
/*	@GeneratedValue(strategy=GenerationType.IDENTITY)*/
	private Integer id;
	private String name;
	private String age;


在开始我虽然指定了主键和主键名,但是没有将address_id作为主键设置为@GeneratedValue(strategy=GenerationType.IDENTITY)自增类型(上面代码以注解),这时运行程序控制台就会报错:

Exception in thread "main" org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.mao.PersonSet

虽然报这个错误,但是hibernate已经创建了一张表(personSet_inf),注意这时表的主键不是自增长模式,

而且你想要插入的数据并没有插入,这时你发现了错误,然后在程序中给主键添加了自增长类型,重新运行项目,就会报错:

Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute statement

Caused by: java.sql.SQLException: Field 'address_id' doesn't have a default value
原因就是:你虽然在代码里修改了主键类型,但是你数据库表已经建好了,它里面的主键依然不是自增长类型,所id不会自动赋值,然后报错:id没有默认值。

解决方案:

先确认程序已经标明主键模式,然后将数据库表删除,重新运行程序,创建带有主键模式的数据表,这样就可以了,而且数据也成功的插入进去。


网友评论
<