JPA抽象类与子类共享PK

时间:2015-07-11 19:51:29

标签: java jpa

我想知道是否有可能有一个抽象类和多个子类"分享"相同的PK(我希望ID在我的抽象类的所有子类之间是唯一的):

@MappedSuperclass
public abstract class MyAbstractClass {

@GeneratedValue(strategy=???) @Id
private long id;
...
}

和两个子类

@Entity
public class MyEntity1 extends MyAbstractClass { ... }

@Entity
public class MyEntity2 extends MyAbstractClass { ... }

我想要实现的结果是 MyEntity1的ID永远不会与MyEntity2的ID相同。

感谢您的时间和意见:)

LE:找到了答案,我已经发布了以下内容!

2 个答案:

答案 0 :(得分:1)

如果您不关心自己的ID类型,请考虑使用UUID密钥:

@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Id
private UUID id;

然后,任何实体的ID都不会与另一个实体的ID相同,无论如何。

答案 1 :(得分:0)

我设法使用TABLE生成策略

获得了预期的结果
@TableGenerator(name = "myGen", table = "ID_GEN", pkColumnName = "GEN_KEY", valueColumnName = "GEN_VALUE", pkColumnValue = "NEXT_ID", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "myGen")
@Id
private long id;

上面的代码将在数据库中生成一个表,该表将作为键值对。它只包含NEXT_ID --> (some number)形式的一行。

在数据库中插入新的(子类)时,它将使用(某个数字)id作为PK,当前数字将增加1。

这样,子类ID在整个数据库中永远不会相同。