我尝试有2个表,如下所示:

MISExercise(表)

身份证名...

2个

MISInteractiveExercise(表)

身份证名...

1例

他们必须没有相同的ID。它们是从同一基础继承的。我的代码是:

@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class MISExerciseBase {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Integer id;

    ...
}

@Entity
public class MISExercise extends MISExerciseBase{
   ...
}

@Entity
public class MISInteractiveExercise extends MISExerciseBase{
   ...
}

不幸的是,我发现MISExercise的表和MISInteractiveExercise的表可以具有相同的ID。当我在google上找到http://openjpa.208410.n2.nabble.com/same-Id-on-mapped-superclass-td2435374.html时。 @Kaayan似乎有相同的问题。但是我无法从该页面获得帮助。

而且,如果我使用@Entity而不是@MappedSuperclass,那会很好。但是为什么呢?有什么好的方法呢?

最佳答案

由于您的MISExerciseMISInteractiveExersice类都继承自MISExerciseBase
并且您已将“生成策略”设置为@GeneratedValue(strategy = GenerationType.TABLE)
您的id不会在所有表中唯一,而在每个表中唯一。

如果您希望在多个表中具有唯一的ID,例如MISExerciseMISInteractiveExerice,则需要将生成策略更改为Auto

因此,要解决您的问题,请将您的抽象类MISExerciseBase更改为此...

@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class MISExerciseBase {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO) //NOTE This Change to AUTO
    private Integer id;

    ...
}

10-06 01:06