如果我在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字段会自动设置吗?
答案 0 :(得分:0)
将在EntityManager.merge(entityObject)
或EntityManager.persist(entityObject)
之后设置。请注意,第一个返回具有id的实体,第二个设置指定实体中的id。
答案 1 :(得分:0)
是的,它会自动设置,但由于你使用序列作为生成类型,并且序列是在数据库端创建的,所以直到这个对象被保存为DB中的条目,你才会得到序列产生的价值。我想说的是需要刷新对象。只要hibernate触发了一个查询来插入这个对象,你就可以设置这个id。
答案 2 :(得分:0)
发现解决方案还是为序列生成器注释提供sequence_name