我使用SINGLE_TABLE繼承startegy來映射我的usres(請參閱代碼示例波紋管)。JPA繼承:將派生實體映射到不同表
有沒有一種方法來映射UnActiveRegularUser和UnActiveBusinessUser從「ACTIVE_USERS」表到另一個表,例如「UNACTIVE_USERS」並保持繼承startegy?
注:
-The這裏點是爲了避免前之間代碼重複。 RegularUser Vs UnActiveRegularUser(因爲它們使用相同的屬性),但仍然將它們映射到2個不同的表格:「ACTIVE_USERS」和「UNACTIVE_USERS」。
-strategy = InheritanceType.SINGLE_TABLE不應該改變。
- 可以添加另一個抽象層來解決這個問題嗎?
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "ACTIVE_USERS")
public class User {
@Id @GeneratedValue
protected Long id;
@Column(nullable = false)
protected String name;
}
@Entity
public class RegularUser extends User{
//more getters and settres
}
@Entity
public class UnActiveRegularUser extends User{
//same getters and setters as in RegularUser
}
@Entity
public class BusinessUser extends User {
//more getters and settres
}
@Entity
public class UnActiveBusinessUser extends User {
//same getters and setters as in BusinessUser
}
感謝, 彌敦道
我把RegularUser和UnActiveRegularUser分隔爲2個實體,據我所知,原因是你不能將1個實體映射到2個不同的列。你提出的遺傳風格問題(例如,UnActiveBusinessUser擴展BusinessUser)是因爲他們會仍然被映射到@Table(name =「ACTIVE_USERS」)...有沒有一種方法來分離映射? – user1062078 2012-07-08 09:46:02
我真的不明白你想要什麼。您希望保留繼承策略(所有實體都映射到單個表),但您也希望將實體映射到多個表。這是矛盾的。 – 2012-07-08 09:49:51
我想將RegularUser&BusinessUser映射到「ACTIVE_USERS」,UnActiveRegularUser&UnActiveBusinessUser映射到「UNACTIVE_USERS」表。我使用繼承來避免實體定義級別的代碼重複,但問題是所有實體仍然只映射到「 ACTIVE_USERS「表... – user1062078 2012-07-08 10:05:39