JPA - Использование составных PK и FK и определение отношений - PullRequest
0 голосов
/ 03 ноября 2011

Я получил эти 2 сущности:

@javax.persistence.Entity
public class Book {
    @javax.persistence.EmbeddedId
    private BookPK id;

    private String title;

    @javax.persistence.ManyToOne(fetch = javax.persistence.FetchType.LAZY)
    @javax.persistence.JoinColumns({ 
            @javax.persistence.JoinColumn(name = "LNGCOD", referencedColumnName = "LNGCOD"),
            @javax.persistence.JoinColumn(name = "LIBCOD", referencedColumnName = "LIBCOD") })
    private Language language;
}

@javax.persistence.Entity
public class Language {
    @javax.persistence.EmbeddedId
    private LanguagePK id;

    private String name;
}

с составными PK:

@Embeddable
public class BookPK implements Serializable {
    private Integer bookcod;
    private Integer libcod;
}

@Embeddable
public class LanguagePK implements Serializable {
    private Integer lngcod;
    private Integer libcod;
}

Если я попытаюсь создать новую Книгу и сохранить ее, я получу исключение, сообщающее мне libcodвстречается дважды в операторе вставки («Столбец 'libcod' указан дважды»).Но я не могу использовать «inserttable = false» при определении JoinColumn («Смешивать вставляемые и не вставляемые столбцы в свойстве запрещено»).

Есть ли способ определить эти объекты + отношения, чтобыколонки управляются автоматически Hibernate?(Я особенно думаю о libcod).

Спасибо.

1 Ответ

1 голос
/ 04 ноября 2011

Создайте третье свойство "Integer libcod;"на книге.Имейте это свойство в управлении состоянием БД libcod.Используйте inserttable = false, updatable = false для обоих свойств в соединении с языком.в вашем "setLanguage" установите приватный libcod = language.libcod.не выставляйте getter / setter для частного libcod.

Есть ли какие-либо значения, сгенерированные во время вставки?Полагаю, это может еще больше осложнить ситуацию.

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