@Embeddable это Foo.class 'PK и Bar.class' FK для Foo.class - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь определить слой JPA над БД, который я не могу изменить. Этот слой содержит отношение OneToMany, в котором часть «Много» имеет внешний ключ, состоящий из тех же 2 полей, которые одна часть имеет в качестве первичного ключа.

@Embeddable
public class FooKey implements Serializable {

    @Column(name="foo_id")
    private String id;
    private String secondaryId;
}

public class Foo {
   @EmbeddedId
   private FooKey id;
   (...)
}

public class Bar {
    @Id
    private Long id;
    (...)

    //@Embedded FooKey fooKey;
    @ManyToOne
    private Foo foo;
   }

Как решить эту проблему? Я получаю ошибку @Column(s) not allowed on a @ManyToOne property

1 Ответ

0 голосов
/ 14 февраля 2020

Мне удалось сделать это с помощью:

  @ManyToOne
  @JoinColumns({
            @JoinColumn (name = "foo_id", referencedColumnName = "foo_id"),
            @JoinColumn (name = "secondary_id", referencedColumnName = "secondary_id")
  })
  private Foo foo;

Хотя, если у кого-то есть более элегантное решение, я приму его

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