DB not refreshed (JPA problem)
tomaszatwork Jul 10, 2008 4:50 PMI want to crete the generic user roles concept with seam. The user can have many roles. The roles selves can have their own child roles. To realize this i created 4 tables
orcuser(id, username, pass)
orcroles(id, name, description)
orcuserrole(userID, roleID)
orcrolerole(parentID, childID)
then i used seam reverse engineering tool to create the entity beans.
if i execute the following code:
OrcRoles parent = em.find(OrcRoles.class, parent.getId()); ArrayList<OrcRoleRole> roles = parent.getOrcRoleRolesForParentId(); roles.remove(roles.iterator().next()); em.merge(parent); em.flush();
the hibernate do not remove the first roleroleItem item from the database.
How can i persuade JPA/Hibernade to remove the manipulated Set elements from DB?
package de.h2o.common.entities.entity; // Generated 07.07.2008 15:04:14 by Hibernate Tools 3.2.0.CR1 import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.validator.NotNull; /** * OrcRoles generated by hbm2java */ @Entity @Table(name = "orc_roles", catalog = "test") public class OrcRoles implements java.io.Serializable { private Long id; private String name; private String description; private Set<OrcRoleRole> orcRoleRolesForParentId = new HashSet<OrcRoleRole>( 0); private Set<OrcUserRole> orcUserRoles = new HashSet<OrcUserRole>(0); private Set<OrcRoleRole> orcRoleRolesForChildId = new HashSet<OrcRoleRole>( 0); public OrcRoles() { } public OrcRoles(String name) { this.name = name; } public OrcRoles(String name, String description, Set<OrcRoleRole> orcRoleRolesForParentId, Set<OrcUserRole> orcUserRoles, Set<OrcRoleRole> orcRoleRolesForChildId) { this.name = name; this.description = description; this.orcRoleRolesForParentId = orcRoleRolesForParentId; this.orcUserRoles = orcUserRoles; this.orcRoleRolesForChildId = orcRoleRolesForChildId; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } @Column(name = "name", nullable = false) @NotNull public String getName() { return this.name; } public void setName(String name) { this.name = name; } @Column(name = "description") public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "orcRolesByParentId") public Set<OrcRoleRole> getOrcRoleRolesForParentId() { return this.orcRoleRolesForParentId; } public void setOrcRoleRolesForParentId( Set<OrcRoleRole> orcRoleRolesForParentId) { this.orcRoleRolesForParentId = orcRoleRolesForParentId; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "orcRoles") public Set<OrcUserRole> getOrcUserRoles() { return this.orcUserRoles; } public void setOrcUserRoles(Set<OrcUserRole> orcUserRoles) { this.orcUserRoles = orcUserRoles; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "orcRolesByChildId") public Set<OrcRoleRole> getOrcRoleRolesForChildId() { return this.orcRoleRolesForChildId; } public void setOrcRoleRolesForChildId( Set<OrcRoleRole> orcRoleRolesForChildId) { this.orcRoleRolesForChildId = orcRoleRolesForChildId; } }
package de.h2o.common.entities.entity; // Generated 07.07.2008 15:04:14 by Hibernate Tools 3.2.0.CR1 import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.hibernate.validator.NotNull; /** * OrcRoleRole generated by hbm2java */ @Entity @Table(name = "orc_role_role", catalog = "test") public class OrcRoleRole implements java.io.Serializable { private OrcRoleRoleId id; private OrcRoles orcRolesByChildId; private OrcRoles orcRolesByParentId; public OrcRoleRole() { } public OrcRoleRole(OrcRoleRoleId id, OrcRoles orcRolesByChildId, OrcRoles orcRolesByParentId) { this.id = id; this.orcRolesByChildId = orcRolesByChildId; this.orcRolesByParentId = orcRolesByParentId; } @EmbeddedId @AttributeOverrides({ @AttributeOverride(name = "parentId", column = @Column(name = "parentID", nullable = false)), @AttributeOverride(name = "childId", column = @Column(name = "childID", nullable = false))}) @NotNull public OrcRoleRoleId getId() { return this.id; } public void setId(OrcRoleRoleId id) { this.id = id; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "childID", nullable = false, insertable = false, updatable = false) @NotNull public OrcRoles getOrcRolesByChildId() { return this.orcRolesByChildId; } public void setOrcRolesByChildId(OrcRoles orcRolesByChildId) { this.orcRolesByChildId = orcRolesByChildId; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parentID", nullable = false, insertable = false, updatable = false) @NotNull public OrcRoles getOrcRolesByParentId() { return this.orcRolesByParentId; } public void setOrcRolesByParentId(OrcRoles orcRolesByParentId) { this.orcRolesByParentId = orcRolesByParentId; } public String toString() { return "OrcRoleRole(parentId:" + id.getParentId() + ", childId:" + id.getChildId() + ")"; } }