我正在使用以下hibernate映射文件
<class name="com.abdus.hibernate.UserTable" table="tbl_users">
<meta attribute="class-description">
This class contains the user details.
</meta>
<id name="userId" type="long" column="userId">
<generator class="native" />
</id>
<property name="firstName" type="string" column="firstName" not-null="true" />
<property name="lastName" type="string" column="lastName" not-null="true" />
<property name="emailId" type="string" column="emailId" not-null="true" />
<property name="password" type="string" column="password" not-null="true" />
</class>
这是我插入新记录的代码
public Long add(UserDomain userDomain) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
Long userId = null;
try {
transaction = session.beginTransaction();
UserTable userTable = new UserTable();
userTable.setFirstName(userDomain.getFirstName());
userTable.setLastName(userDomain.getLastName());
userTable.setEmailId(userDomain.getEmailId());
userTable.setPassword(userDomain.getPassword());
userId = (Long) session.save(userTable);
System.out.println("userId returned is " + userId);
transaction.commit();
userTable.toString();
} catch (Exception e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}
return userId;
}
但我看到的是每次插入记录时,总是会插入一个user_id为1.意思是DB中只有一条记录带有user_id 1.为什么hibernate每次都不会增加user_id的值插入记录?
答案 0 :(得分:1)
试
<generator class="increment"/>
我希望它能解决问题。
答案 1 :(得分:1)
我以前从未使用过这个,但在规范中,Native选项解释如下。
它根据数据库选择标识,序列或hilo。
对我来说有点模糊。
我所知道的是取决于数据库,它会选择不同的ID,并且数据库在物理上必须具有对象,例如,标识或序列。
对我来说,我正在使用Oracle,所以我特意使用
<generator class="sequence">
<param name="sequence">SEQUENCE_NAME</param>
</generator>
如果您使用的是某个特定数据库,请使用更具体的类。 希望这会有所帮助。
答案 2 :(得分:0)
Finally i resolved this. I had this in the hibernate.cfg.xml file <property name="hbm2ddl.auto">create</property>
This was causing the schema to be created every time. So i did two things to resolve my issue
- remove the following <property name="hbm2ddl.auto">create</property>
- create the table with auto-increment
答案 3 :(得分:0)
<generator class="native"/>
连接到Sybase数据库时生成错误。
为此,我们尝试使用
<generator class="increment"/>