2011-06-22 110 views
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; 
+0

如果我设置权限清单和合并之前更新组它是成功的。但我认为这是一个错误。 – ayengin

回答

0

JPA 1与孤儿实体有问题,并且JPA-1实现jar的hibernate有一些额外的错误。设置列表为null解决了我的问题,我希望JPA-2解决了这个问题。