Hibernate / JPA: как сопоставить две сущности @Immutable (представления одной и той же таблицы) с другой сущностью по тому же параметру - PullRequest
0 голосов
/ 03 января 2019

Есть таблица ORDERS, из которой были созданы представления ORDER_VIEW_A и ORDER_VIEW_B.

Я создал классы сущностей OrderViewA и OrderViewB, в которых в каждом из них отображается сущность с именем «TransactionRecord».

Это отношения @OneToOne. Существует столбец ORDER_ID в таблице TRANSACTION_RECORD и поле orderId в сущности TransactionRecord.

Поле orderId одинаково для OrderViewA.id и для OrderViewB.id, представления причин выбираются из одной таблицы.

У меня вопрос, как отобразить в Hibernate два представления в OneToOne-отношениях с другим объектом по тому же полю.

Мой код выглядит так, и он никак не работает, Hibernate всегда заканчивается:

org.hibernate.AnnotationException: указанное свойство не является (Один | Много) ToOne: com.example.app.model.TransactionRecord.orderId в mappedBy из com.example.app.model.views.OrderViewA.orderViewA

@Entity
@Immutable
@Table(name = "ORDER_VIEW_A")
public class OrderViewA {

    @Id
    @Column(name = "id")
    private Long id;

    ...

    @OneToOne(mappedBy = "orderId", fetch = FetchType.LAZY)
    private IntegrationRecord orderARecord;

    ...
}

@Entity
@Immutable
@Table(name = "ORDER_VIEW_B")
public class OrderViewB {

    @Id
    @Column(name = "id")
    private Long id;

    ...

    @OneToOne(mappedBy = "orderId", fetch = FetchType.LAZY)
    private IntegrationRecord orderBRecord;

    ...
}

@Entity
@Table(name = "TRANSACTION_RECORD")
public class TransactionRecord {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "order_id")
    private Long orderId;

    ...

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id")
    private OrderViewA orderViewA;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id")
    private OrderViewB orderViewB;

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