Hibernate序列id生成器值的种群

时间:2013-06-24 20:45:42

标签: java hibernate

如果我在java中有一个DO,其中一个字段是使用GenerationType.SEQUENCE生成的值,并且我想创建此对象的新实例,那么该字段是否会自动填充?即

public class LogEntry {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="ENTITY_SEQ")
@SequenceGenerator(name = "ENTITY_SEQ")
@Column(name = "migration_batch_id", nullable = false, updatable = false, length = 38)
private long uniqueId;

//Bunch of other fields
}

如果我创建了一个LogEntry类的实例,请设置其他字段,然后将实例保存到数据库中。 uniqueId字段会自动设置吗?

3 个答案:

答案 0 :(得分:0)

将在EntityManager.merge(entityObject)EntityManager.persist(entityObject)之后设置。请注意,第一个返回具有id的实体,第二个设置指定实体中的id。

答案 1 :(得分:0)

是的,它会自动设置,但由于你使用序列作为生成类型,并且序列是在数据库端创建的,所以直到这个对象被保存为DB中的条目,你才会得到序列产生的价值。我想说的是需要刷新对象。只要hibernate触发了一个查询来插入这个对象,你就可以设置这个id。

答案 2 :(得分:0)

发现解决方案还是为序列生成器注释提供sequence_name