У меня есть объект JPA, которые могут быть отнесены к югу, определяется следующим образом:Получение подклассы от EntityManager.find()
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "IDTYPE",
discriminatorType = DiscriminatorType.STRING,
length = 12)
public class BaseObject implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//etc
Преимущество этого в том, что BaseObject и все его подклассы доли одно и то же поле идентификатора - каждое значение уникально для всех из них. Мой вопрос, когда я делаю EntityManager.find() на базовый класс, как это:
@PersistenceContext protected EntityManager em;
// find a record.
BaseObject obj = em.find(BaseObject.class, longIDValue);
Будет ли найти метод вернуть один из подклассов, если он использует этот конкретный идентификатор? Или он всегда будет возвращать только объект BaseClass?
Последующий вопрос: совместимо ли это поведение между различными реализациями JPA? (например, Hibernate vs. EclipseLink)
и что происходит, когда вы это делаете? Когда я делаю это с DataNucleus JPA, я получаю правильный тип ... я могу быть подклассом. Точно так же, как спецификация JPA –
@NeilStockton У меня возникли проблемы с моим приложением, поэтому я еще не испытал это. Но даже если это работает, я хотел бы убедиться, что я не делаю что-то зависимое от реализации. Я пропустил это в спецификации - если вы можете опубликовать ссылку на нее, я буду отмечать ее как ответ. – AlanObject
Вы уверены, что хотите/нуждаетесь в супер сущности с объединенным наследованием? Это приведет к критическому замедлению, особенно к отношениям * @ OneToMany/@ ManyToMany *. –