日期:2014-05-20  浏览次数:20682 次

hibernate3.6.0 @GeneratedValue 问题
为什么我直接
//@GeneratedValue
public int getId() {
return id;
}
会提示Field 'id' doesn't have a default value
但是我用表生成策略
@TableGenerator(
name = "teacher_id", //表ID策略名字
table = "teacher_tableId", //数据库表名字
pkColumnName = "pk_key",//字段名1 pk=primary key
valueColumnName = "pk_value", //字段名2
pkColumnValue = "Teacher",//字段1值
allocationSize = 1//每次增加的值...详情看视频hibernate 23
)
@GeneratedValue(strategy=GenerationType.TABLE,generator="teacher_id")
就没有错误了、
不是说@GeneratedValue这个是默认ID自增的吗。
这个错误恼火了好久。。。。。。。。。

------解决方案--------------------
@GeneratedValue(strategy=GenerationType.TABLE,generator="teacher_id")
配置错,

JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. 
TABLE:使用一个特定的数据库表格来保存主键。 
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 
IDENTITY:主键由数据库自动生成(主要是自动增长型) 
AUTO:主键由程序控制。 

你用GenerationType.TABLE,需要另一个表格来保存主键.

如果想主键自增长,就使用AUTO

@GeneratedValue(strategy = GenerationType.AUTO)
在指定主键时,如果不指定主键生成策略,默认为AUTO。
------解决方案--------------------
hibernate主键策略生成器就更多,
------解决方案--------------------
学习学习!!!
------解决方案--------------------
你差了最基本的@ID 注解?
如果是oracle,你看是否有相应的sequence创建?
------解决方案--------------------
@Id
@GeneratedValue