我对this SO问题进行了跟进,因为自2010年以来我们还有一些JPA版本,并且正如答案中的评论所述:
我试过了......它只能因为分配大小为1而工作。但实际上是单独的生成器和单独的工作。如果选择大于1的分配大小,您将看到每个实体将具有不同的ID范围。 (在这里使用Hibernate 3.6,使用4.x可能效果更好吗?)
我想使用一个@TableGenerator
为多个JPA实体生成ID。所以,让我们假设两个实体:
@Entity
public class MaritalStatus {
@Id
@TableGenerator(
name = "appSeqStore",
table = "APP_SEQ_STORE",
pkColumnName = "NAME",
pkColumnValue = "ReferenceTables",
valueColumnName = "VALUE",
initialValue = 0,
allocationSize = 11)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "appSeqStore")
private Long id;
}
和
@Entity
public class Country {
@Id
// Can I reference the same generator here?
@GeneratedValue(strategy = GenerationType.TABLE, generator = "appSeqStore")
private Long id;
}
两个实体都不相关,因此没有@MappedSuperclass
或类似的东西,第一个存储婚姻状况,第二个存储国家。但是,我确实希望他们能够从同一序列中获取身份,因此婚姻状况和国家的身份永远不会重叠。这两个id也需要11个证明。
问题:
@MappedSuperclass
,我可以使用一个@TableGenerator
,还是需要在每个实体中复制生成器?@MappedSuperclass
,那么这是一个停止代码重复的解决方案吗?我在WildFly 8.2上使用Hibernate JPA 2.1