如何在hibernate中编写删除查询的多对多关系

时间:2009-06-05 13:02:15

标签: java hibernate

我有两个bean用户和virtualdomain

@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表中删除设置了删除标志的用户,以便如何编写该删除查询。

1 个答案:

答案 0 :(得分:0)

只需从用户的集合中删除virtualDomain,然后删除另一面的完整性

// 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();        
}