【发布时间】:2016-08-13 01:57:33
【问题描述】:
我是hibernate的新手,正在玩它。对于实体中的唯一字段,我正在为其设置 @GeneratedValue 注释。假设我有两个实体,用户和公司,并且都具有带有 @GeneratedValue 注释的唯一 ID。当我使用休眠会话工厂保存这两个实体时,生成的 id 分别为 1 和 2,这两个实体应该是 1。下次我保存两者时,生成的 id 是 3 和 4 。 所以我的猜测是,@GeneratedValue 在数据库级别而不是表级别工作。如何使它成为表级?
添加一些代码和配置。
用户实体
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
}
公司实体
@Entity
@Table(name="company")
public class Company {
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
}
使用休眠会话保存
Session session = sessionFactory.getCurrentSession();
User user = new User();
session.save(user);
Company company = new Company();
session.save(company);
结果
mysql> 从用户中选择 *;
+-----+
|编号 |
+-----+
| 234 |
+-----+
mysql> select * from company;
+-----+
|编号 |
+-----+
| 235 |
+-----+
对于记录,我使用 hibernate-jpa-2.1-api ( 1.0.0.Draft-16 ) 和 hibernate 5。
【问题讨论】:
-
默认情况下它实际上应该为两个实体生成 1。请向我们展示您的配置和一些代码。