2014-02-04 3 views
2

Рассмотрим класс @Entity, класс A, а другой класс B, являющийся POJO, и распространяется A.Upcast a POJO для класса сущности JPA

Есть ли способ принудительного повышения от B до A (без отражений)?

У меня есть метод, который получает объект класса A и сохраняется этот объект. Передача ссылки на объект B приведет к сбою JPA, поскольку он все еще рассматривает объект как экземпляр класса B, а B не аннотируется @Entity.

ответ

0

Загляните в аннотацию @Inheritance, которая разрешает отношения наследования в объектных моделях, ее можно настроить несколькими способами (таблица для каждого класса, одна таблица).

Я создал видеоуроки, в которых описываются эти две стратегии. Первое видео охватывает single table strategy, а остальные охватывает table per class.

Использование единой стратегии таблицы вы аннотировать класс A следующим образом:

@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@Table(name="TABLE_NAME") 
@DiscriminatorColumn(name="DISCRIMINATOR_COLUMN", discriminatorType=DiscriminatorType.STRING) 
@Entity 
public class A {} 

Тогда аннотировать класс B:

@Entity 
@Table(name = "TABLE_NAME") 
@DiscriminatorValue(value="VALUE_TO_DISTINGUISH_B") 
public class B{} 

Единственное, что следует отметить, что в этом случае B производится юридическое лицо , которые, я считаю, потребуются в любом сценарии.

0

Возможно, вы не хотите/не можете добавить объект B в файл persistence.xml. Если да, то вы могли бы использовать Джексон, как это:

1.Create B «s JSON представление:

ObjectMapper mapper = new ObjectMapper(); 
String jsonString = mapper.writeValueAsString(instanceB); 

2.Create A -instance из JSON строки, игнорируя неизвестные свойства. Используйте для этого this setting.

Смежные вопросы