2009-06-05 62 views
0

我有两个豆的用户和虚拟域中怎么写,删除在Hibernate查询多对多的关系

@Entity 
@Table(name = "tblUser") 

public class User implements Serializable { 
    private Long id; 
    private String username; 
private String deleteflag; 
    private Set<VirtualDomain> virtualdomainset; 
@Id 

@Column(name = "id") 
@GeneratedValue(strategy = GenerationType.AUTO) 
public Long getId() { 
     return id; 
} 

public void setId(Long id) { 
     this.id = id; 
} 

@Column(name = "username", length = 50, nullable = false) 
public String getUsername() { 
     return username; 
} 

public void setUsername(String username) { 
     this.username = username; 
} 
@Column(name = "deleteflag") 
    public String getDeleteflag() { 
     return deleteflag; 
    } 

    public void setDeleteflag(String deleteflag) { 
     this.deleteflag = deleteflag; 
    } 
    @ManyToMany(targetEntity = VirtualDomain.class, cascade = {CascadeType.PERSIST},fetch=FetchType.EAGER) 
    @JoinTable(name = "tblUserDomainRel", joinColumns = @JoinColumn(name = "userid"), inverseJoinColumns = @JoinColumn(name = "domainid")) 
    public Set<VirtualDomain> getVirtualdomainset() { 
     return virtualdomainset; 
    } 

public void setVirtualdomainset(Set<VirtualDomain> virtualdomainset) { 
    this.virtualdomainset = virtualdomainset; 
} 

} 



@Entity 
@Table(name = "tblVirtualDomain") 
public class VirtualDomain { 
    private Long id; 
    private String domainname; 
private String deleteflag; 
    private Set<User> userset; 
@Id 
@JoinColumn(name = "id") 
@GeneratedValue(strategy = GenerationType.AUTO) 
public Long getId() { 
     return id; 
} 

public void setId(Long id) { 
     this.id = id; 
} 

@Column(name = "domain_name") 
public String getDomainname() { 
     return domainname; 
} 

public void setDomainname(String domainname) { 


    this.domainname = domainname; 
} 
@Column(name = "deleteflag") 
    public String getDeleteflag() { 
     return deleteflag; 
    } 

    public void setDeleteflag(String deleteflag) { 
     this.deleteflag = deleteflag; 
    } 
@ManyToMany(cascade = {CascadeType.ALL},fetch=FetchType.EAGER, mappedBy = "virtualdomainset", targetEntity = User.class) 

public Set<User> getUserset() { 
     return userset; 
} 

public void setUserset(Set<User> userset) { 
     this.userset = userset; 
} 
} 

现在,当我删除一些用户我用它来设置,这意味着该数据仍保留在数据库中的deleteflag 。 我的要求是,必须从tblUserDomainRel表中删除设置了删除标记的用户,以便如何编写该删除查询。

回答

0

刚从用户集合中删除的虚拟域中,并删除对方的完整性

// on User 
public void removeVirtualDomain(VirtualDomain vd){ 
    virtualDomainset.remove(vd); 
    vd.getUserset().remove(this) 
} 

这将删除的关系记录。或者从所有虚拟域删除用户:

// on User 
public void removeFromAllVirtualDomains(){ 
    for(VirtualDomain vd : virtualdomainset){ 
     vd.getUserset().remove(this); 
    } 
    virtualDomainset.clear();   
} 
+0

我写的第一个功能,并呼吁它,当我设置虚拟域中deleteflag,但它不工作giveing我显示java.lang.NullPointerException的上线错误virtualDomainser.remove(VD)。 – Jugal 2009-06-05 13:37:50