一个简单的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
------解决方案--------------------你数据库貌似 不是自动增长的。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------我记得用SEQUENCE类型的话要在表中建立一个序列表~
------解决方案--------------------你在oracle里面首先要建立个SEQUENCE
然后代码中用 SEQUENCE 方式
------解决方案--------------------改成这样试试
<?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="native" />
</id>
<property name="firstName" column="first_name" not-null="true"/>