Hibernate继承单表

Hibernate继承单表,hibernate,inheritance,Hibernate,Inheritance,我的课程设置如下。Hibernate ddl生成2个表Admin和Customer。按照单表策略,我只希望有一个表 @MappedSuperclass public abstract class BaseUser{ ... } @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public class Admin extends BaseUser{ ... } @Entity @Inheritance(strategy=

我的课程设置如下。Hibernate ddl生成2个表Admin和Customer。按照单表策略,我只希望有一个表

@MappedSuperclass
public abstract class BaseUser{
...
}

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Admin extends BaseUser{
...
}


@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}
@MappedSuperclass
公共抽象类BaseUser{
...
}
@实体
@继承(策略=InheritanceType.SINGLE_表)
公共类管理员扩展BaseUser{
...
}
@实体
@继承(策略=InheritanceType.SINGLE_表)
公共类Customer扩展BaseUser{
@独身癖
私人名单订单;
...
}

不,单表继承的工作方式不同。继承策略需要在超类上定义。有关参考信息,请参阅

@Entity
@Inheritance
@DiscriminatorColumn(name="USER_TYPE")
@Table(name="USER")
public abstract class BaseUser{
...
}

@Entity
@DiscriminatorValue("A")
public class Admin extends BaseUser{
...
}

@Entity
@DiscriminatorValue("C")
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}
@实体
@继承权
@鉴别器列(name=“USER\u TYPE”)
@表(name=“USER”)
公共抽象类BaseUser{
...
}
@实体
@鉴别器值(“A”)
公共类管理员扩展BaseUser{
...
}
@实体
@鉴别器值(“C”)
公共类Customer扩展BaseUser{
@独身癖
私人名单订单;
...
}

请注意,根据您的数据库,您可能被允许或不被允许调用表
USER
。还有一个.

虽然不确定@MappedSuperclass为什么不起作用,但它似乎起作用了

@Entity
@Inheritance
public abstract class BaseUser{
...
}

@Entity
public class Admin extends BaseUser{
...
}


@Entity
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}
@实体
@继承权
公共抽象类BaseUser{
...
}
@实体
公共类管理员扩展BaseUser{
...
}
@实体
公共类Customer扩展BaseUser{
@独身癖
私人名单订单;
...
}

我认为这不是真的……子类应该继承继承策略。在任何情况下,这也不起作用。我告诉过你…它基本上与我发布的内容相同(忽略默认配置)。请阅读我发布的关于@MappedSuperclass的链接。它的作用与您所追求的完全相反——每个子类都有一个单独的表(每个子类都有超级类字段的列)。我试过你的建议。即使我在超类上定义了@MappedSuperclass,我也无法使用它。这一定是一个误解。您问题中的代码使用了
@MappedSuperclass
,这是错误的。我的答案是使用
@heritation
(而不是
@MappedSuperclass
)生成您需要的内容。我对
@MappedSuperclass
的回答中的参考是为了解释如何使用它以及为什么它不适合您的场景。