【发布时间】:2013-03-06 10:13:19
【问题描述】:
我可以使用 hibernate 注释为同一字段设置自动增量和用户设置 id 吗?
例如: 如果用户输入 ID,则使用给定的 ID
-或-
如果用户没有输入任何内容,Hibernate 应该自己创建 ID。
如有任何建议,我将不胜感激。
【问题讨论】:
我可以使用 hibernate 注释为同一字段设置自动增量和用户设置 id 吗?
例如: 如果用户输入 ID,则使用给定的 ID
-或-
如果用户没有输入任何内容,Hibernate 应该自己创建 ID。
如有任何建议,我将不胜感激。
【问题讨论】:
由于您已绑定到 Hibernate,因此您可以使用自定义 id 生成器。假设您有以下 id 字段,如果用户提供了您想要的 id,否则它应该是自动生成的。
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY, generator="CustomIdGenerator")
@GenericGenerator(name="CustomIdGenerator ",
strategy="xx.yy.zz.CustomIdGenerator"
)
private Integer id;
这是自定义生成器,如果没有提供,它将生成 id。
import org.hibernate.id.IdentityGenerator;
...
public class CustomIdGenerator extends IdentityGenerator {
@Override
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
if ((((yourEntity) obj).getId()) == null) {
Serializable id = super.generate(session, obj) ;
return id;
} else {
return ((yourEntity) obj).getId();
}
}
【讨论】:
Serializable id = super.generate(session, obj) 位置我收到POST_INSERT_INDICATOR IdentifierGeneratorHelper$2 的对象@
我想你正在寻找这个
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
【讨论】: