Объединение нескольких столбцов в аннотациях Hibernate/JPA

У меня есть две сущности, которые я хотел бы соединить через несколько столбцов. Эти столбцы являются общими для объекта @Embeddable, который является общим для обоих объектов. В приведенном ниже примере Fooможет иметь только один Bar, но Barможет иметь несколько Foos (где AnEmbeddableObject— уникальный ключ для Bar). Вот пример:

@Entity
@Table(name = "foo")
public class Foo {
    @Id
    @Column(name = "id")
    @GeneratedValue(generator = "seqGen")
    @SequenceGenerator(name = "seqGen", sequenceName = "FOO_ID_SEQ", allocationSize = 1)
    private Long id;
    @Embedded
    private AnEmbeddableObject anEmbeddableObject;
    @ManyToOne(targetEntity = Bar.class, fetch = FetchType.LAZY)
    @JoinColumns( {
        @JoinColumn(name = "column_1", referencedColumnName = "column_1"),
        @JoinColumn(name = "column_2", referencedColumnName = "column_2"),
        @JoinColumn(name = "column_3", referencedColumnName = "column_3"),
        @JoinColumn(name = "column_4", referencedColumnName = "column_4")
    })
    private Bar bar;

    // ... rest of class
}

И класс Bar:

@Entity
@Table(name = "bar")
public class Bar {
    @Id
    @Column(name = "id")
    @GeneratedValue(generator = "seqGen")
    @SequenceGenerator(name = "seqGen", sequenceName = "BAR_ID_SEQ", allocationSize = 1)
    private Long id;
    @Embedded
    private AnEmbeddableObject anEmbeddableObject;

    // ... rest of class
}

Наконец, Класс AnEmbeddedObject:

@Embeddable
public class AnEmbeddedObject {
    @Column(name = "column_1")
    private Long column1;
    @Column(name = "column_2")
    private Long column2;
    @Column(name = "column_3")
    private Long column3;
    @Column(name = "column_4")
    private Long column4;

    // ... rest of class
}

Очевидно, что схема плохо нормализована, это ограничение, которое AnEmbeddedObject' s поля повторяются в каждой таблице.

Моя проблема заключается в том, что я получаю эту ошибку, когда пытаюсь запустить Hibernate:

org.hibernate.AnnotationException: referencedColumnNames(column_1, column_2, column_3, column_4) of Foo.bar referencing Bar not mapped to a single property

Я попытался пометить JoinColumns как не вставляемые и не обновляемые, но безуспешно. Есть ли способ выразить это с помощью аннотаций Hibernate/JPA?

24
задан ROMANIA_engineer 16 February 2017 в 19:13
поделиться