0

トランザクションのロールバックにもかかわらず、組み込み可能なオブジェクトのリストがデータベースに保持される理由がわかりません。

埋め込み可能なロールのリストを持つエンティティ ユーザーがいます。

データベースに既に存在するのと同じユーザー名でユーザーを永続化すると、例外が表示されます:「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
}
4

0 に答える 0