2010-05-27 2 views
1

나는 꽤 오랫동안이 문제로 이미 어려움을 겪어왔다. 이 작업은 COTISATION 테이블 매핑에 포함 최대 절전 모드 UserType을 연장 SynchroDataType 사용합니다Hibernate hbm에서 JPA 주석, 까다로운 하나

<join table="COTISATION_SYNCHRO" fetch="join" optional="true"> 
     <key column="COTISATION_SYNCHRO_COTISATION_ID_FK" on-delete="noaction"/> 
     <property name="cotisationCoupon" type="java.lang.Long" update="true" insert="true"> 
      <column name="COTISATION_COUPON" not-null="true" unique="true"/> 
     </property> 
     <property name="synchroData" type="com.allence.opcapl.alpha2.common.model.synchro.SynchroDataType"> 
      <column name="LAST_ACCESS_LOCAL" not-null="true"/> 
      <column name="LAST_UPDATE_LOCAL" not-null="true"/> 
      <column name="LAST_ACCESS_REMOTE" not-null="true"/> 
      <column name="LAST_UPDATE_REMOTE" not-null="true"/> 
     </property> 
    </join> 

: 내가이있을 거라고 생각했던 것보다 적은 간단한 많이 나타납니다.

이 기능은 정말 훌륭하지만 편리하게 JPA로 변환하는 방법을 찾을 수 없습니다.

누군가가 그런 종류의 일대일 매핑을위한 해결책을 가지고 있습니까? @Embedded 주석에서

답변

1

봐 당신의 엔티티가 아닌 객체 SynchroDataType를 해결하고 @SecondaryTableCOTISATIONCOTISATION_SYNCHRO 사이의 일대일 매핑을 처리 할 수 ​​있습니다.

+0

주석 :

여기에 솔루션입니다. – qualidafial

0

감사합니다. @JoinTable, 잘못된 방향에 집중하고있었습니다. @secondaryTable이 (가) 트릭을했습니다.

@Entity 
@Table(name = "COTISATION") 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
@SecondaryTable(name = "COTISATION_SYNCHRO", pkJoinColumns = @PrimaryKeyJoinColumn(name = "COTISATION_SYNCHRO_COTISATION_ID_FK")) 
public class Cotisation { 
... 

@Embedded 
@AttributeOverrides({ 
     @AttributeOverride(name = "lastAccessLocal", column = @Column(name = "LAST_ACCESS_LOCAL", table = "COTISATION_SYNCHRO")), 
     @AttributeOverride(name = "lastUpdateLocal", column = @Column(name = "LAST_UPDATE_LOCAL", table = "COTISATION_SYNCHRO")), 
     @AttributeOverride(name = "lastAccessRemote", column = @Column(name = "LAST_ACCESS_REMOTE", table = "COTISATION_SYNCHRO")), 
     @AttributeOverride(name = "lastUpdateRemote", column = @Column(name = "LAST_UPDATE_REMOTE", table = "COTISATION_SYNCHRO")) 
}) 
private SynchroData synchroData; 

@Column(name = "COTISATION_COUPON", table = "COTISATION_SYNCHRO", unique = true) 
private Long cotisationCoupon; 

SynchroData 클래스와 엔티티가 아닌 클래스 자체에 @Embeddable 잊지 마세요 @Embeddable