Сопоставление нескольких подклассов с одним и тем же родительским идентификатором в присоединенном наследовании JPAJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сопоставление нескольких подклассов с одним и тем же родительским идентификатором в присоединенном наследовании JPA

Сообщение Anonymous »

Я создал таблицы Person, PersonExtra, PersonBasic и т. д. в своей базе данных с суперклассом Person и подклассами PersonExtra и PersonBasic.

Код: Выделить всё

@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
@Id
@Column(name = "id", nullable = false, unique = true, length = 20)
private String id;
private String name;
private String lastname;
// ...
}

Код: Выделить всё

@Entity
@PrimaryKeyJoinColumn(name = "extra_id")
public class PersonExtra extends Person {
private String code;
private String subject;
// ...
}

Код: Выделить всё

@Entity
@PrimaryKeyJoinColumn(name = "basic_id")
public class PersonBasic extends Person {
private String range;
}
Если я сначала создаю Person, а затем попытаюсь создать PersonExtra с существующим идентификатором Person, я получу ошибку дублирования идентификатора, поскольку он пытается сохранить как Person, так и PersonExtra. Кажется, что человек может иметь только один уникальный тип и может быть создан только через подкласс.
  • Мне бы хотелось, чтобы человек мог быть одновременно и PersonExtra, и PersonBasic.
Когда я моделировал базу данных, это казалось лучше. У меня возникла идея использовать что-то вроде наследования в базе данных, которое было бы проще отобразить.
Как мне структурировать свои объекты JPA, чтобы разные подклассы (PersonExtra и PersonBasic) могли создаваться с тем же идентификатором, что и суперкласс (Person)?
  • Я подумал, что, возможно, можно создать отношения «один к одному», такие как Person с PersonExtra и Person с PersonBasic могут работать.

    Мне понравилась идея наследования здесь, но, кажется, разве это невозможно в этой ситуации?
  • Я подумывал об использовании аннотации MappedSuperclass, но разве это не только для абстрактного класса, когда объект не создается в базе данных?
  • Или, может быть, мне следует изменить базу данных и создать связь «один ко многим» с ролями? Часть меня думает, что некоторая часть семантики базы данных может быть потеряна, а последующая реализация логики может оказаться сложной.
Я новичок в этом и могу во всем ошибаться.

Подробнее здесь: https://stackoverflow.com/questions/797 ... nheritance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»