JPA @TableGenerator在多个实体之间共享 - 第2部分

时间:2015-02-25 20:49:05

标签: java hibernate jpa jpa-2.1

我对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个证明。

问题:

  1. 如果我不想要@MappedSuperclass,我可以使用一个@TableGenerator,还是需要在每个实体中复制生成器?
  2. 如果第一个问题不可能,而且我确实使用了@MappedSuperclass,那么这是一个停止代码重复的解决方案吗?
  3. 我在WildFly 8.2上使用Hibernate JPA 2.1

0 个答案:

没有答案