我有以下结构 一个抽象的超类A. 和一个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的类值。
所以基本上我不能在Z类中使用@MapKey注释来使用map_field,如上所述。我对A类的map_field没有有用的值。
有没有人提示如何解决这个问题?
先谢谢,Alex
答案 0 :(得分:0)
我没有看到你的问题。你的A类是抽象的,所以从来没有它的实例,因此它们不需要任何“有用的值”,即使你有无用的默认值A,例如0或-1,这取决于你的情况。 你不能在B,C中隐藏你的超类的字段,因为它会搞乱一切。从B,C中删除它们并且它都可以工作(id也是多余的,因为它已在A中定义)。 但是你应该为A添加你的继承策略,而不是让它有机会(默认)。