0
我有两个类Group和Permission,当我尝试向Group添加新权限时,Group有一个Permission列表。我设置了新的权限列表并成功提交,但在数据库没有发生更新。我正在使用jpa 1(hibernate作为提供程序)。我正在为entitymanager(而不是jta)创建请求。我的托管bean请求范围(a4j:keepalive),我尝试使用它来查找错误但不成功。JPA manytomany单向映射更新问题
1-获取用于编辑当前组为选择克选自G联接取g.permissions其中g.id =:ID如果它从懒惰导致获取许可列表的(as here)
2-刷新从数据库列表中的所有权限然后合并组。
public class GroupEditorBean extends AbstractGroupBean {
private static final long serialVersionUID = -7454051588934099916L;
@PostConstruct
public void init() {
this.group= groupAccessor.findGroup(Long.valueOf(getParameter("group")));
perms = this.group.getPermIdList();
}
public String save() {
if(group.isRoot()){
addError("Root group can not be updated");
return "";
}
List<Permission> permissions= convertToPermission(perms);
this.group.setPermissions(permissions);
groupAccessor.merge(group);
logger.log(String.format("Updated group %s", group.getName()), "group",
Log.Severity.INFO);
return "modules/user/groups.xhtml";
}
@Entity
@Table(name = "GROUPS")
public class Group implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "GID")
private Long id;
@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
@JoinTable(name = "GROUP_PERMISSION", joinColumns = @JoinColumn(name = "GID"), inverseJoinColumns = @JoinColumn(name = "PID"))
private List<Permission> permissions;
@Entity
@Table(name = "PERMISSIONS")
public class Permission implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PID")
private Long id;
@NotNull
@Column(name = "READABLE_ID", unique = true)
private String readableId;
如果我设置权限清单和合并之前更新组它是成功的。但我认为这是一个错误。 – ayengin