Correctly delete a relational entity
germandev.net-seam.wje-online.de Mar 26, 2009 2:46 PMHi!
I do have the following classes:
@Entity
@Table(name = "daDomain")
@Name("domain")
public class Domain implements Serializable
{
@Override
public int hashCode() {
...
}
@Override
public boolean equals(Object obj) { ... }
private static final long serialVersionUID = 1L;
private int id;
private String name;
private List<MailUser> mailuser;
@DataModel
@OneToMany(targetEntity = MailUser.class)
@JoinColumn(name = "intDomainID", referencedColumnName = "intDomainID")
public List<MailUser> getMailuser() {
return mailuser;
}
public void setMailuser(List<MailUser> mailuser) {
this.mailuser = mailuser;
}
@Id @GeneratedValue @Column(name="intDomainID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="strDomain",unique=true)
@Length(max=20,min=6)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
and
@Entity
@Table(name = "daMailUser")
@Name("mailUser")
@Scope(ScopeType.EVENT)
public class MailUser implements Serializable
{
@Override
public int hashCode() {..}
@Override
public boolean equals(Object obj) {..}
private int id;
private String username;
private String password;
private Domain domain;
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
@Column(name = "intMailUserID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "strUsername")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "strPassword")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@ManyToOne
@JoinColumn (name = "intDomainID")
public Domain getDomain() {
return domain;
}
public void setDomain(Domain domain) {
this.domain = domain;
}
}
I do have a datatable filled with MailUsers. In an event scoped bean I defined a function
public String delete(MailUser objMailuser)
{
objMailuser = em.merge(objMailuser);
em.remove(objMailuser);
em.flush();
}while domain the current (injected) domain is.
This procedure works sometimes, but most times (as I can see from hibernate log) the entity is deleted and then recreated (reinserted). Another issue is, that the datatable, that is bound to 'domain.mailUsers' isn't refresehd.
Do you know what I can do to fix these two issues?
Thank you in advance!