私は2つのテーブルを持っています:UserExtended
はUser
を継承しています。しかし、既存のUser
をUserExtended
に昇格することはできません。Hibernate継承(TABLE_PER_CLASS)テーブル展開
エンティティ:
@Entity
@Table
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
// columns: id, email, etc.
}
@Entity
@Table
@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
public class UserExtended extends User {
// columns
}
サービス:このコードで
// Repositories
@Autowired
private UserDao userDao;
@Autowired
private UserExtendedDao userExtendedDao;
public void promoteUser() {
User user = userDao.getUserByEmail(email);
UserExtended userExt;
if (user != null) {
if (user instanceof UserExtended) {
// cast UserExtended
userExt = (UserExtended) user;
} else {
// extend User to UserExtended
userExt = new UserExtended();
userExt.setId(user.getId());
// userExt.setEmail(user.getEmail());
userExt = userExtendedDao.save(userExt); // exception here!
}
} else {
// create new UserExtended
}
}
は、私は例外を取得:SQLServerException: Cannot insert the value NULL into column 'email', table 'User'; column does not allow nulls. INSERT fails
email
ため、列がDB内のNULLではありません。
userExt.setEmail(user.getEmail());
行のコメントを外すときは、email
が一意である必要があるため、別の例外SQLServerException: Cannot insert duplicate key row in object 'User' with unique index 'UQ_User_email'. The duplicate key value is ([email protected])
が発生します。
プレーンSQLでの挿入はINSERT INTO UserExtended (id) VALUES (13);
として実行できます。HibernateとSpring Data JPAを使用して同じことを行うにはどうすればよいですか?