当Entity那端,一切都正常时,进行单元测试,依然碰到一下问题:
oracle.toplink.essentials.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'PRIMARY'.
检查了下,主键生成策略是:@GeneratedValue(strategy=GenerationType.IDENTITY),没错。
我的问题解决是在数据库中:在数据库中,没有将主键设为自动增长。将已经存在的表的主键设为自动增长SQL语句为:
alter table course change course_id course_id int(10) not null auto_increment ;
hibernate annotation 定义字段的默认值
java类中定义属性的默认值并不能直接映射到数据库的定义当中
如 private String a="A";
public String getA(){};
数据库的a字段并没有default.
用annotations column中的columnDefinition 可以解决
@Column(columnDefinition ="varchar2(2) default '11'")
public String getA(){};
字段就可以存在默认值了
注意字段的类型必须指定,因为hibernate 会把columnDefinition 的内容直接写在生成标的ddl中,因此语法必须正确。