Преобразование Hibernate в подкласс - PullRequest
2 голосов
/ 14 июля 2010

Я сопоставил класс в JPA. :

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
    private Long id;
    private Long name;
    //getters and setters go here
    ....
}

У меня также есть подкласс этого класса, называемый Admin:

@Entity
public class Admin extends User {
    private String cridentials;
    //getters and setters go here
    ....
}

Теперь в моем коде я управляю экземпляром User, присоединенным к сеансу

...
User user = entityManager.find(User.class, userId)

Мне нужно преобразовать этого пользователя в его подкласс Admin. Это означает, что мне нужно, чтобы данные таблицы «Пользователь» остались нетронутыми, а новая строка была вставлена ​​в таблицу «Администратор»:

javax.persistence.EntityManager entityManager = ...;
...
User user = entityManager.find(User.class, userId)
Admin admin = new Admin();
admin.setName(user.getName());

entityManager.persist(admin);

Но после того, как я выполню последнюю строку, в таблицы User и Admin вставляется другая строка. Как бы я решил это?

Единственный способ, который я нашел до сих пор, - это сохранить где-нибудь поля пользователя, затем удалить этот экземпляр из БД, а затем создать нового администратора со всеми данными из класса пользователя. Но держу пари, что есть гораздо лучший способ сделать это.

Спасибо

1 Ответ

1 голос
/ 14 июля 2010

(...) Но после выполнения последней строки в таблицы User и Admin вставляется другая строка.Как бы я решил это?

Итак, вы создали новый экземпляр Admin и назвали его persist, так что это именно то, что вы сказали Hibernate делать.Попробуйте вместо этого извлекать извлеченный экземпляр User как Admin.*

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