我们有桌子
用户
-id:长
-login:varchar
-weapon:varchar
-magic:varchar
我希望将这个表映射到两个类(使用Hibernate / JPA)
class Mag
{
long id;
String login;
String weapon;
}
和
class Warrior
{
long id;
String login;
String magic;
}
如果我发送HQL查询:SELECT m FROM Mag m WHERE m.login = ?
那么我得到Mag实例
如果我发送HQL查询:SELECT w FROM Warrior w WHERE w.login = ?
那么我得到Warrior实例
我尝试做这样的事情
@Entity
@Table(name = "User")
class User
{
long id;
String login;
}
@Entity
class Mag extends User
{
String magic;
}
@Entity
class Warrior extends User
{
String weapon;
}
但@Inheritance要求鉴别器列,但我没有鉴别器。
答案 0 :(得分:8)
您正在寻找MappedSuperClass,它允许子类从超类继承注释,而无需使用鉴别器。
答案 1 :(得分:2)
如果你有一个deliminator列,你可以使用Discriminator。假设你的deliminator列是
utype char(1)
如果
utype = m,这是一个Mag实体和
utype = w,即Warrior实体
请在下面找到代码。
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "utype", discriminatorType = DiscriminatorType.CHAR)
@Table(name = "User")
class User
{
long id;
String login;
}
@Entity
@DiscriminatorValue("m")
class Mag extends User
{
String magic;
}
@Entity
@DiscriminatorValue("w")
class Warrior extends User
{
String weapon;
}