我试图使用Hibernate将一个类层次结构映射到一个表,而一个表没有创建。我添加了@Inheritance(strategy = InheritanceType.SINGLE_TABLE),但是在基础中有单独的表。
@MappedSuperclass
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public abstract class User implements UserDetails {
@Id @GeneratedValue
private int id;
...
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
...
}
@Entity
public class Manager extends User{
...
}
@Entity
public class Administrator extends User{
...
}
怎么了?
答案 0 :(得分:1)
您的用户类应该是
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(field = "type", discriminatorType = DiscriminatorType.STRING)
public class User implements UserDetails {
/* your original stuff */
}
然后你需要按如下方式映射扩展类:
@Entity
@DiscriminatorValue("manager")
public class Manager extends User { /* stuff */ }
@Entity
@DiscriminatorValue("administrator")
public class Administrator extends User { /* stuff */ }
这实际上应该创建一个表,其中包含来自User
,Manager
和Administrator
的所有字段,使用由Hibernate添加的名为type
的特殊字段。将保留manager
或administrator
的值。