JPA:将@MapKey 用于抽象 class

JPA: Using @MapKey for an abstract class

我有以下结构 一个抽象的 superclass A 和一个 class Z 使用地图引用 As 子类 B 和 C:

@Entity
Abstract Class A
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    Integer map_field; <----------------------- Problematic
    ....

@Entity
Class B extends A
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    Integer map_field;
    ....

@Entity
Class C extends A
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    Integer map_field;
    ....

@Entity
Class Z
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @OneToMany(cascade = CascadeType.ALL)
    @MapKey(name="map_field")
    private Map<Integer,A> a_entities;

问题是 map_field 是基于对象 B 和 C 的值,而不是基于对象 A 的 class 值。

所以基本上我不能像上面写的那样在 class Z 中使用 @MapKey 注释来使用 map_field。 class A.

的 map_field 没有有用的值

有人能告诉我如何解决这个问题吗?

提前致谢,亚历克斯

我没有看到你的问题。你的 class A 是抽象的,所以从来没有它的实例,所以他们不需要任何 "useful values",即使你可以有无用的 A 默认值,例如 0 或 -1取决于你的情况。 您不能在 B、C 中隐藏 superclass 的字段,因为它会弄乱所有内容。从 B、C 中删除它们及其所有工作(而且 id 是多余的,因为它已经在 A 中定义)。 但是你应该为 A 添加你的继承策略,而不是留给它机会(默认)。