Я отобразил класс в JPA. :Экземпляр преобразования Hibernate в подкласс
@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 = 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);
Но после того, как я исполняю последнюю строку, другая строка вставляется в обоих пользователей и администратора таблиц. Как я могу это решить?
Единственный способ, который я нашел до сих пор, - это сохранить поля пользователя где-нибудь, а затем удалить этот экземпляр из БД, а затем создать новый Admin со всеми данными из класса User. Но я уверен, что есть намного лучший способ сделать это.
Благодаря
На самом деле, у администратора есть много свойств, которые пользователь не должен иметь - вот почему я использую наследование. Пользователь не может быть отключен для администратора, поэтому 'Admin a = (Admin) user;' здесь не работает ... Проблема в том, что пользователь не является абстрактным, он используется системой, а также администратором. Тем не менее, я не могу «сказать» hibernate для создания нового Admin от текущего пользователя. Даже когда я устанавливаю ID администратора для пользователя и пытаюсь объединиться, он говорит, что администратор не управляется. –