事务回滚时将@ElementCollection持久化到数据库

时间:2014-08-06 14:48:57

标签: java list openjpa rollback embeddable

我不知道为什么尽管事务回滚,我的可嵌入对象列表仍然存在于数据库中。

我的实体用户具有可嵌入角色列表。

当我使用与数据库中已存在的用户名相同的用户名时,我看到一个异常:“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
}

0 个答案:

没有答案