单一表策略不起作用Hibernate

时间:2016-04-23 08:50:33

标签: java hibernate

我试图使用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{

    ...

}

怎么了?

1 个答案:

答案 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 */ }

这实际上应该创建一个表,其中包含来自UserManagerAdministrator的所有字段,使用由Hibernate添加的名为type的特殊字段。将保留manageradministrator的值。