Java 事务回滚时将@ElementCollection持久化到数据库
我不知道为什么尽管事务回滚,我的可嵌入对象列表仍然存在于数据库中 我的实体用户具有可嵌入角色列表 当我使用数据库中已经存在的相同用户名持久化用户时,我看到一个异常:“RollbackException:无法提交:标记为回滚的事务”,这非常好,因为我有唯一的用户名列。但我不知道为什么,尽管有回滚,该用户的角色列表仍然存在于数据库中 这就像事务只为实体类工作,并且每次都将嵌入角色的列表持久化到数据库中,即使它不应该这样做(因为回滚) 我做错了什么? 谢谢你的提示 (我正在使用OpenJPA2.3.0) 用户代码:Java 事务回滚时将@ElementCollection持久化到数据库,java,list,openjpa,rollback,embeddable,Java,List,Openjpa,Rollback,Embeddable,我不知道为什么尽管事务回滚,我的可嵌入对象列表仍然存在于数据库中 我的实体用户具有可嵌入角色列表 当我使用数据库中已经存在的相同用户名持久化用户时,我看到一个异常:“RollbackException:无法提交:标记为回滚的事务”,这非常好,因为我有唯一的用户名列。但我不知道为什么,尽管有回滚,该用户的角色列表仍然存在于数据库中 这就像事务只为实体类工作,并且每次都将嵌入角色的列表持久化到数据库中,即使它不应该这样做(因为回滚) 我做错了什么? 谢谢你的提示 (我正在使用OpenJPA2.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
}
在您的用户实体中的列表角色上使用@OrderColumn。请参阅我完全按照上面链接中的内容所做的操作。添加@OrderColumn没有帮助。我仍然有同样的问题。不同的解决方案?
@Embeddable
public class Role {
@Column(name="username")
String username;
@Column(name="userrole")
String role;
//getters and setters
}