나는이 일을했다는 것을 믿고 나는 무언가를 했음에 틀림 없다. 바라건대, 누군가 즉시 문제를 볼 수 있습니다.JPA 판별 자 값을 매핑하는 방법은 무엇입니까?
상속 관계에있는 두 개의 클래스. 놀이에 두 테이블입니다. 두 테이블 모두 레코드를 수신합니다. 손에 문제 : discriminator 값이 저장되지 않았습니다.
부모 클래스
@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 (?, ?)
최대 절전 모드
<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>
, 최대 절전 모드는 Enrg의 삽입에 entp 열/값을 포함 무엇을 가지고 내가 어떻게해야합니까? 이 경우, entp 값은 'ws'여야합니다.
솔루션
내 모든 매핑/구성은 위와 같이 남아있다. 하이버 네이트 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 전략에서 discriminator를 지원하지 않으면 많은 JPA 제공자가 있다는 것을 확신합니다. –