Я считаю, что у меня было это, и я должен был что-то сделать. Надеюсь, кто-то сразу увидит проблему.Как сопоставить значение дискриминатора JPA?
Два класса в отношениях наследования. В игре играют два стола. Обе таблицы получают записи. Проблема: значение дискриминатора не сохраняется.
Родитель Класс
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="entp", discriminatorType=DiscriminatorType.STRING)
@Table(name="enrg")
public abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="enid")
private Long entityId;
// some string property mapped to column 'nm;
// some string property mapped to column 'ns;
// some string property mapped to column 'tmcr;
Детский класс
@Entity
@DiscriminatorValue("ws")
@Table(name="ws")
public class Website extends BaseEntity {
private static final long serialVersionUID = 1L;
@Column(name="exdr", length=100)
private String exportDirectory;
служба вызова
getEntityManager().persist(website);
SQL
Hibernate: insert into enrg (nm, ns, tmcr) values (?, ?, ?)
Hibernate: insert into ws (exdr, enid) values (?, ?)
Hibernate
<persistence-unit name="prod" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>prodDataSource</jta-data-source>
<class>webadmin.domain.core.Website</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name = "hibernate.show_sql" value = "true" />
<property name = "hibernate.discriminator.ignore_explicit_for_joined" value = "false" />
</properties>
</persistence-unit>
Что мне нужно сделать, чтобы Hibernate включают ENTP столбец/значение в вкладышем для enrg? В этом случае значение entp должно быть «ws».
Решение
Все мои отображения/конфигурация остается, как указано выше. Я обновился до Hibernate 4.3.6 и теперь под TomEE 1.7 теперь работает.
Hibernate: insert into enrg (nm, ns, tmcr, entp) values (?, ?, ?, 'ws')
Hibernate: insert into ws (exdr, enid) values (?, ?)
Если Hibernate не поддерживает дискриминаторы по стратегии JOINED, то я уверен, что есть много других поставщиков JPA, которые это делают. –