一个简单的hibernate3 annotation问题:自动生成主键
大家好,我的问题是这样的,主键无法生成,请大家帮我看看。
@Entity
@Table(name = "APP_USER")
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name = "FIRST_NAME")
private String firstName;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
}
这样的话,在调用getHibernateTemplate().saveOrUpdate(user);的时候,始终无法插入记录,请问是否要对表做什么设置吗?
可是同样的表,以前用hbm.xml,就能够正常生成主键,并成功插入记录。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="org.appfuse.model.User" table="app_user">
<id name="id" column="id" unsaved-value="0">
<generator class="increment" />
</id>
<property name="firstName" column="first_name" not-null="true"/>
</class>
</hibernate-mapping>
请高手指点,谢谢!
[解决办法]
[解决办法]
<generator class="increment" />
VS
@GeneratedValue(strategy=GenerationType.AUTO)
你看看区别。
你应该根据数据库选择合适的类型,比如 Identity
[解决办法]
自增长在jpa中一般是identity
[解决办法]
你数据库貌似 不是自动增长的。
[解决办法]
</class>
</hibernate-mapping>
关键不知道你是用什么数据库,如果是建了sequence哪就要改为
<id name="id" column="id" type="Integer">
<generator class="sequence">
<param name="sequence">seq_APP_USER</param>
</generator>
</id>