回答
save()方法返回保存的实体的ID。你可以使用它!
参考: - >http://docs.jboss.org/hibernate/annotations/3.5/api/org/hibernate/Session.html
您明确地创建一个单独的序列,得到它的值,然后插入一个基于该值与ID对象。您将拥有更多的代码,但在插入之前该ID将可用,并且序列保证与串行给定的ID完全相同,因为它们本质上是相同的。
换句话说:
- 创建自己的序列
- 使主键的简单
int
不serial
- 得到序列
- 一些使用它作为一个ID为对象
This question有一个答案说如何得到nex t序列值。
您可以实现接口org.hibernate.id.IdentifierGenerator
并创建一个Id生成器。
例子:
import com.fasterxml.uuid.Generators;
import com.fasterxml.uuid.impl.TimeBasedGenerator;
public class TimeBasedIDGenerator implements IdentifierGenerator {
private static TimeBasedGenerator generator = Generators.timeBasedGenerator();
private static TimeBasedIDGenerator SINGLETON = new TimeBasedIDGenerator();
public static UUID generate() {
return SINGLETON.generateUUID();
}
@Override
public Serializable generate(SessionImplementor session, Object parent) throws HibernateException {
return generator.generate();;
}
}
你可以在你的实体这样使用。所以ID是由构造函数生成的:
@Entity
public EntityClassName {
private UUID uuid;
private Integer mandatoryField;
public EntityClassName() {
}
public EntityClassName(Integer mandatoryField) {
this.uuid = TimeBasedIDGenerator.generate();
this.mandatoryField = mandatoryField;
}
@Id
@Column(name = COLUMN_XXX_UUID)
@Type(type = "java.util.UUID")
public UUID getUuid() {
return uuid;
}
// setter + other properties
}
由于hibernate通过反射调用默认构造函数,因此此实现将为您的实体在从数据库读取数据时提供一个新ID。看起来你不知道你错过了hibernate的IdentifierGenerator。 – lost
事实上,生成新ID的调用不能在默认构造函数中,而应在其他构造函数中。我会修改我的帖子。 –
- 1. 如何在保存到数据库之前获取生成器ID?
- 2. 如何在保存到数据库之前合并数据?
- 3. 在保存到数据库之前修改数据
- 4. CakePHP在保存到数据库之前更改数据
- 5. 在保存到sqlite数据库之前(和之后)比较NSString
- 6. 在保存模型之前在YII中获取型号ID
- 7. 在ebean之前生成简短的ID,将实体保存到数据库中
- 8. 在保存到Rails数据库之前修改表单参数
- 9. 在保存到数据库之前比较字节数组
- 10. 如何在NHibernate侦听器中保存到数据库之前获取实体的ID?
- 11. 休眠获取保存的对象之前,持久化到数据库
- 12. 获取当前日期并将其保存到数据库中
- 13. 保存到数据库之前编辑数据
- 14. setter在保存之前获取猫鼬对象ID
- 15. 如何在保存到数据库之前设置布尔值?
- 16. Rails在保存到数据库之前弹出窗口
- 17. Laravel在保存到数据库之前改变日期?
- 18. 在保存到MySQL数据库之前调整图像大小
- 19. 在保存到数据库之前清理$ _SERVER ['HTTP_USER_AGENT']&$ _SERVER ['HTTP_REFERER']?
- 20. 方法保存 - 获取当前ID
- 21. 在分配父代之前保存嵌套数据ID
- 22. 在插入到数据库之前获取标识属性值
- 23. Laravel预览之前保存到数据库
- 24. Rails - 保存到数据库之前更新嵌套属性
- 25. 保存到数据库之前应该散列哪些信息?
- 26. PHP保存到mysql数据库之前调整图像大小?
- 27. Yii2在保存到数据库之前显示phpexcel中的数据
- 28. Ruby on Rails:在保存到数据库之前总结文件中的数据
- 29. 在保存到核心数据之前压缩图像数据
- 30. 从API密钥获取数据以保存到数据库中
这不是什么OP要求 - 要求是“之前将其保存” – kostja
但事实是,保存()不实际保存的实体。它只在下一次刷新时保存(隐式或隐式) –