от Hibernate HBM до аннотаций JPA, сложной - PullRequest
1 голос
/ 27 мая 2010

Я уже давно борюсь с этим. Кажется, все гораздо проще, чем я думал:

    <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>

Это включено в COTISATION отображение таблицы и использует SynchroDataType, расширяя Hibernate UserType.

Это прекрасно работает, но я не могу найти способ перевести его в нужный JPA, сохраняя при этом удобство.

Есть ли у кого-нибудь решение для такого однозначного отображения?

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Посмотрите на аннотацию @ Embedded , чтобы решить объект не-сущности SynchroDataType и @ SecondaryTable для обработки однозначного отображения между COTISATION и COTISATION_SYNCHRO.

0 голосов
/ 02 июня 2010

спасибо большое, у меня все получилось. Я сосредоточился на @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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...