2015-07-11 102 views
1

我想知道是否有可能有一个抽象类和多个子类“共享”同一个PK(我想要的ID是我的抽象类的子类之间是唯一的):JPA抽象类份额PK与子类

@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

你可以简单地使用相同的序列生成的所有实体,如果你的数据库支持。但为什么你有这个要求? –

+0

@JBNizet:我必须坚持两个与一些小例外非常相似的实体,我不想把它们放在同一个表中。 –

回答

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将永远不会整个数据库都是一样的。

1

如果你不关心你的ID的类型,可以考虑使用UUID键:

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

然后,没有实体的ID将永远不会与另一个实体的ID是相同的,不管是什么。