Я сопоставил класс в 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 вставляется другая строка. Как бы я решил это?
Единственный способ, который я нашел до сих пор, - это сохранить где-нибудь поля пользователя, затем удалить этот экземпляр из БД, а затем создать нового администратора со всеми данными из класса пользователя. Но держу пари, что есть гораздо лучший способ сделать это.
Спасибо