0

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

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 字段吗?

4

3 回答 3

0

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

于 2013-06-24T21:12:22.837 回答
0

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

于 2013-08-09T18:07:57.947 回答
0

是的,它会自动设置,但是由于您使用序列作为生成类型,并且序列是在数据库端创建的,所以在将该对象保存为数据库中的条目之前,您将不会获得生成的序列值。我要说的是需要刷新对象。只要 hibernate 触发一个查询来插入这个对象,你就会设置这个 id。

于 2013-06-24T21:40:38.930 回答