У меня есть две сущности для двух классов. Первый является расширенным классом второго (шаблон Observer): Дочерний элемент:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorValue("User")
@Table(name="SCH.USER")
public class User extends Observer implements Serializable{
...fields...
}
И отец:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING)
@Table(name="SCH.OBSERVER")
public abstract class Observer implements Serializable{
@Id
@SequenceGenerator(name = "OBSERVER_ID_GENERATOR", sequenceName = "NEXO.SEQ_OBSERVER", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "OBSERVER_ID_GENERATOR")
@Column(name="ID_OBSERVER")
private Long idObserver;
@Column(name = "DISCRIMINATOR", nullable=false, length=20)
private String discriminator;
}
Поскольку я обновил JPA 2.0 до JPA 2.1, я не могу сохранить дочерний объект: em.persist(userInstance); Что генерирует следующий SQL:
insert
into
NEXO.OBSERVER
(DISCRIMINATOR, ID_OBSERVER)
values
('User', ?)
И получает результирующую ошибку:
java.sql.SQLException: invalid column index
Я почти уверен, что это изменение поведения было вызвано обновлением до JPA 2.1.
@Formula
или у вас есть методgetDiscriminator()
, который вы реализуете для каждого подкласса Observer. И вам не нужно определятьInheritanceType
дважды — используйте его только для корневого объекта. - person Tobias Liefke   schedule 17.09.2015