我正在使用JPA 1.0,所以我的操作受到限制,但我仍然认为应该可以实现以下操作,但我无法使其正常运行...
Table CustomerA
a_id
Table ProductB
a_id
b_id
Table ProductC
a_id
c_id
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractProduct {
@Id
@GeneratedValue....
private Long id;
private String name;
@ManyToOne()
JoinColumn(name="a_id")
private CustomerA customerA;
}
现在我想创建一个子类,它可以覆盖Id
或者基于Table A
的PK
和派生表的键创建组合键...
@Entity
@Table(name="ProductB")
public class ProductB extends AbstractProduct {
//@AttributeOverride(name="id", column=@Column(name="B_ID") //Can only be used with MappedSuperClass and also Emmbedded Objects
//@Id //cant override the ID Column so that cant go here
//PrimaryKeycolumn join not what i want here
private Long productB_id;
private String productName;
}
@Entity
@Table(name="CustomerA")
public class CustomerA
{
@Id
@GeneratedValue....
@Column(name="a_id")
private Long aId
@OneToMany(mappedBy="customerA", cascade=CascadeType.ALL)
private Set<AbstractProduct> product;
}
因此,
CustomerA
可以包含许多产品,但始终只能是 ProductB
或 ProductC
中的一个。如果您不能使用 attributeoverride
和实体类来覆盖子类中的 Id
,那该怎么办呢?如果您使用 @Entity
,则必须在指定 @Entity
时指定 @Id
。我已经阅读了 JPA wiki,并且看起来在 JPA 1.0 中实现这一点相当复杂和繁琐,但我想知道是否有什么遗漏?