1

我已经设置了我的课程,如下所示。Hibernate ddl 生成 2 个表 Admin 和 Customer。根据 SINGLE_TABLE 策略,我预计只有一个表。

@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;
...
}
4

2 回答 2

1

不,单表继承的工作方式不同。继承策略需要在超类上定义。请参阅JPA Wikibook以供参考。

@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;
...
}

请注意,根据您的数据库,您可能会或可能不会被允许调用您的表USER。还有一个如何使用 @MappedSuperclass 的示例

于 2012-12-31T14:11:10.507 回答
-1

尽管不确定为什么 @MappedSuperclass 不起作用,但这似乎仍然有效。

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

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


@Entity
public class Customer extends BaseUser{
@OneToMany
private List<Order> orders;
...
}
于 2012-12-31T15:17:37.967 回答