我想知道是否有可能有一个抽象类和多个子类"分享"相同的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:找到了答案,我已经发布了以下内容!
答案 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在整个数据库中永远不会相同。