как написать запрос на удаление в спящем режиме для отношений «многие ко многим»

У меня есть два пользователя bean и виртуальный домен

@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;
}
}

Теперь, когда я удаляю какого-либо пользователя, я использую для установки флага удаления, что означает, что данные остаются в базе данных. Мое требование состоит в том, что пользователь, чей флаг удаления установлен, должен быть удален из таблицы tblUserDomainRel, поэтому как написать этот запрос на удаление.


person Jugal    schedule 05.06.2009    source источник


Ответы (1)


arrow_upward
0
arrow_downward

просто удалите виртуальный домен из коллекции на пользователе и удалите другую сторону для полноты

// 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();
}
person Gareth Davis    schedule 05.06.2009
comment
Я написал первую функцию и вызвал ее, когда устанавливал флаг удаления VirtualDomain, но она не работает, выдавая ошибку java.lang.NullPointerException в строке virtualDomainser.remove(vd). - person Jugal; 05.06.2009
comment
это не так много, но я предполагаю, что vitualDomainset равен нулю. - person Gareth Davis; 05.06.2009