Кастинг сущностей JPA 2, Spring 3 - PullRequest
0 голосов
/ 19 октября 2011

Привет всем, у меня проблемы с расширением сущностей и сохранением их в базе данных, моя модель имеет следующие значения:

Люди - базовые сущности, которые необходимо сохранить
Друг - лист сущностей
Коллега - листовой сущности

проблема возникает, когда я получаю человека из базы данных, а затем я хочу «сделать это» другом, вместо этого создаю еще одну строку «Люди» с теми же значениями, и я хочу взять существующую.

Я использую стратегию объединения, у меня есть стратегия наследования.

какие-либо подсказки ??

1 Ответ

2 голосов
/ 19 октября 2011

Могу поспорить, что вы подразумеваете под "сущностью листа", "Друзья и коллеги наследуют людей", верно?

То, что вы пытаетесь достичь, не подходит для использования наследования.

Подумайте просто ОО:

Вы создали экземпляр "Person" (как следует из другого комментария, более разумно использовать Person вместо People), вы не можете сделать этот экземпляр "Friend".

Вам следует подумать о том, чтобы разделить Друг / Сотрудника как отдельные сущности, и рассматривать их как дополнительные атрибуты, которые несет Персона. например,

@Entity
class Person {
  @OneToOne(mappedBy="people")
  FriendAttribute friendAttribute;

  @OneToOne(mappedBy="people")
  CoworkerAttribute coworkerAttribute;
}


@Entity
class FriendAttribute {
  @OneToOne
  Person person;

  // other friend-related attributes

}

@Entity
class CoworkerAttribute {
  @OneToOne
  Person person;

  // other coworker-related attributes

}

Таким образом, если вы хотите, чтобы Человек был сотрудником, вы собираетесь назначить Атрибут сотрудника этому Человеку.

Честно говоря, этот вопрос не имеет ничего общего с Hibernate или JPA. Это просто не работает в обычном POJO, как я предлагал ранее. В Java вы просто не можете сделать экземпляр класса экземпляром другого класса.

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