相当简单的情况,但我遇到了找到工作映射的问题。示例剥离了最基本的问题。
两个实体:玩家和教练。两者都有出生日期。
数据库
Table PL // Player
NUMERIC plid AUTOINCREMENT
Table CO // Coach
NUMERIC coid AUTOINCREMENT
Table BASE
NUMERIC enid - playerId or coachId
CHAR entp - 'PL' for Player, 'CO' for Coach
DATE bdt
爪哇
Abstract BaseClass {
Date dateOfBirth;
}
@Entity
@Table(name="PL")
Player extends BaseClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="plid")
Long playerId;
}
@Entity
@Table(name="CO")
Coach extends BaseClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="coid")
Long coachId;
}
我们如何映射BaseEntity类以将表BASE中的Player.dateOfBirth保存为1, 'PL', 1970-01-01
?
答案 0 :(得分:0)
您需要使用InheritanceType.JOINED,它允许您在基表中保留公共数据,子类可以包含特定于其需求的数据。
在您的示例中,' entp'可以充当鉴别列。您应该按如下方式注释您的类:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="ENT_TYPE")
@Table(name="BASE")
public abstract class BaseClass {
@Id
Long id;
@Column(name = "ENT_TYPE")
String entp;
...
}
@Entity
@DiscriminatorValue("PL")
@Table(name="PL")
public class Player extends BaseClass {
}
@Entity
@DiscriminatorValue("CO")
@Table(name="CO")
public class Coach extends BaseClass {
}