JPA2.0 Как отобразить коллекцию сущности с наследованием, сопоставленным с помощью TABLE_PER_CLASS
Я хочу отобразить коллекцию (карту) сущности с наследованием. Сущность и наследующая сущность выглядят так:
@Entity
public class TestEntity {
@OneToMany(mappedBy = "parent")
public Map<String, MapValueEntity> map
= new HashMap<String, MapValueEntity>();
@Id
@GeneratedValue(strategy = AUTO)
protected long id;
public String name;
public TestEntity() {
}
public TestEntity(String name) {
this.name = name;
}
}
@Entity
public class SubEntity extends TestEntity{
public SubEntity() {
}
String testSubEntityName;
public SubEntity(String name) {
this.testSubEntityName = name;
}
}
Сущность, которая используется в качестве значения карты, это
@Entity
public class MapValueEntity {
TestEntity parent;
@Id
@GeneratedValue(strategy = AUTO)
protected long id;
public MapValueEntity() {
}
String subEntityName;
public MapValueEntity(String name) {
this.subEntityName = name;
}
}
А вот и тестовый код:
EntityManager em = EntityManagerService.getEntityManager();
em.getTransaction().begin();
for (int i = 0; i < 10; i++) {
TestEntity e = new TestEntity("MyNameIs" + i);
for (int j = 0; j < 8; j++) {
MapValueEntity se = new MapValueEntity("IamNo" + j + "." + i);
e.map.put("Key" + i * 100 + j, se);
se.parent = e;
em.persist(se);
}
em.persist(e);
}
em.getTransaction().commit();
Пока все отлично работает. EclipseLink помещает TestEntity и SubEntity в одну таблицу со столбцом дискриминатора для различения классов. И полные данные карты хранятся в таблице для MapValueEntity. Теперь, если я изменю стратегию сопоставления со значения по умолчанию (= SINGLE_TABLE) на TABLE_PER_CLASS, конструкция нарушится:
@Entity
@Inheritance(strategy = TABLE_PER_CLASS)
public class TestEntity {
...
Описание исключения говорит:
Для поля [MAPVALUEENTITY.MAP_KEY] существует несколько доступных для записи сопоставлений. Только один может быть определен как доступный для записи, все остальные должны быть указаны только для чтения.
Видите ли вы какой-либо шанс использовать стратегию TABLE_PER_CLASS в этом сценарии? Где упоминаются "множественные записи для записи"?