休止状態でエンティティの遅延読み込みを試していますが、上記のエラーを乗り越えることができませんでした。私は基本的に2つのエンティティで遊んでいます:ユーザーとロール:
public class User implements Serializeable {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "T_USER_ROLE", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
private Set<Role> roles = new HashSet<Role>();
}
public class Role implements Serializeable { }
そして、User エンティティを作成するアクション Bean があります。このアプローチを 1 と呼びましょう。
user.getRoles().add(roleService.findByName(RolesEnum.ADMIN.toString()));
em.persist(user);
そして、ロールを設定して更新する前に、最初にユーザーエンティティを永続化しようとしましたが、失敗しました:
userService.create(user);
User user = userService.findById(user.getId());
Set<Role> roles = new HashSet<Role>();
roles.add(roleService.findByName(RolesEnum.MEMBER.toString()));
user.setRoles(roles);
userService.update(user, true);
ご了承ください:
- userService.create = 持続
- userService.update = マージ
- MEMBER ロールはすでにロール テーブルに存在します
- また、ロールを取得しようとしました: entity.getRoles();
以下は、完全なエラー ログです。
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.test.Role org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1374)