У меня есть два класса Group и Permission, у Group есть список Permission, когда я пытаюсь добавить новое разрешение в группу. Я устанавливаю новый Список полномочий и фиксирую успешно, но обновление не происходит в базе данных. Я использую jpa 1 (hibernate как провайдер). Я создаю запрос для управления данными (не jta). Моя область запроса управляемого бина (a4j: keepalive), и я пробую это для определения местоположения ошибки, но не успешно.as Выберите g из группы g. Получить выборку g.permissions, где g.id =: id , если это происходит из-за отложенного выбора списка разрешений ( как здесь )
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;