トランザクションのロールバックにもかかわらず、組み込み可能なオブジェクトのリストがデータベースに保持される理由がわかりません。
埋め込み可能なロールのリストを持つエンティティ ユーザーがいます。
データベースに既に存在するのと同じユーザー名でユーザーを永続化すると、例外が表示されます:「RollbackException: コミットできません: ロールバック用にマークされたトランザクション」、これは一意のユーザー名列があるため完全に問題ありません。しかし、ロールバックにもかかわらず、そのユーザーのロールのリストがデータベースに保持される理由がわかりません。
トランザクションがエンティティクラスに対してのみ機能し、埋め込まれたロールのリストをデータベースに永続化する必要がある場合でも (ロールバックのために) 永続化するようです。
私は何を間違っていますか?ヒントをありがとう(私はOpenJPA 2.3.0を使用しています)
ユーザーコード:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(unique = true, nullable = false)
private String username;
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(
name = "ROLES",
joinColumns = @JoinColumn(name = "OWNER_ID")
)
private List<Role> roles;
private String password;
private boolean enabled;
public User(String username, String password) {
this.username = username;
this.password = password;
this.enabled = true;
roles = new ArrayList<Role>();
Role userrole = new Role();
userrole.setRole("ROLE_USER");
userrole.setUsername(username);
roles.add(userrole);
}
//getters and setters
}
役割コード:
@Embeddable
public class Role {
@Column(name="username")
String username;
@Column(name="userrole")
String role;
//getters and setters
}