tags:

views:

699

answers:

1

I have two beans user and 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;
}
}

Now when I delete some user i use to set the deleteflag which means that the data remains in the database. My requirement is that the user whose delete flag is set must be removed from the tblUserDomainRel table so how to write that delete query.

A: 

just remove the virtualDomain from the collection on the User and remove the other side for completeness

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

this will remove the relationship record. Or to remove a user from all virtual Domains:

// on User
public void removeFromAllVirtualDomains(){
    for( VirtualDomain vd : virtualdomainset ){
        vd.getUserset().remove(this);
    }
    virtualDomainset.clear();        
}
Gareth Davis
I have written the first function and called it when I was setting the deleteflag of VirtualDomain but it is not working giveing me the error of java.lang.NullPointerException on line virtualDomainser.remove(vd).
Jugal
that's not much to go on, but I'm guessing that the vitualDomainset is null.
Gareth Davis