Java 在单个表上映射两个类
我要一张桌子 用户Java 在单个表上映射两个类,java,hibernate,jpa,Java,Hibernate,Jpa,我要一张桌子 用户 -id:long -登录:varchar -武器:瓦查尔 -魔法:瓦查尔 我想把这个表映射到两个类上(使用Hibernate/JPA) 及 如果我发送HQL查询:从Mag m中选择m,其中m.login=?则我得到Mag实例 如果我发送HQL查询:从Warrior w中选择w,其中w.login=?则我得到Warrior实例 我试着做这样的东西 @Entity @Table(name = "User") class User { long id;
-id:long
-登录:varchar
-武器:瓦查尔
-魔法:瓦查尔 我想把这个表映射到两个类上(使用Hibernate/JPA) 及 如果我发送HQL查询:
从Mag m中选择m,其中m.login=?
则我得到Mag实例如果我发送HQL查询:
从Warrior w中选择w,其中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;
}
但是@heritation需要鉴别器列,但我没有鉴别器 您正在寻找的,它允许子类从超类继承注释,而不需要鉴别器。如果您有一个deliminator列,您可以使用鉴别器。假设您的除沫器列为 utype char(1) 如果 utype=m,这是一个Mag实体,并且 utype=w,即战士实体 请查找下面的代码
@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;
}
@Entity
@Table(name = "User")
class User
{
long id;
String login;
}
@Entity
class Mag extends User
{
String magic;
}
@Entity
class Warrior extends User
{
String weapon;
}
@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;
}