休眠删除用户和用户类型,而不是仅删除用户

时间:2019-05-26 11:45:05

标签: java mysql spring hibernate spring-boot

我正在用spring和angular7开发一个webapp。我注意到正在发生某些事情...我有通用的DAO和通用的服务来进行CRUD操作。 当我删除具有X id的用户时(例如,但是在所有实体中都发生这种情况),具有X id的用户类型也将被删除!但是该用户类型不是我要删除的用户的用户类型。

我想删除该用户:

User {id: 5, name: hector, pass: blabla, id_user_type: {id: 2, desc: Admin}}

服务器删除了该用户,并且用户ID为5-> user type{id: 5, desc: Anonymous}

我在phpmyadmin中选中了“在删除时设置为null”和“在更新时级联”,并且设置正确。

我调试了通用的删除DAO方法,并且只调用了一次。

我认为这是休眠状态的问题,我应该指定只删除要在方法中指定的对象,而不要删除其子对象。

Generic Delete dao:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Override
    public <T> String delete(final T o) {
        sessionFactory.getCurrentSession().delete(o);
        return "Deleted";
    }

实体:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SecondaryTable;
import javax.persistence.SecondaryTables;
import javax.persistence.Table;

import org.hibernate.annotations.DynamicUpdate;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sun.istack.NotNull;

@Entity()
@Table(name="usuario")
@SecondaryTables({
    @SecondaryTable(name = "tipo_usuario", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "id") })
})
@DynamicUpdate(value=true)
public class UsuarioBean {


...


@ManyToOne()
    @JoinColumn(name = "id_tipo_usuario")
    @NotNull
    private TipoUsuarioBean id_tipo_usuario;


...

}


我只想删除该用户,然后休眠删除用户(id = 14)行和user_type(id = 14)行:

enter image description here

1 个答案:

答案 0 :(得分:0)

我不明白为什么在控制应用程序时为什么要使用辅助表注释,更好的设计是创建单独的实体,然后使用多对注注释映射它们,就像辅助表一样,我猜这是它在操作中执行的默认行为主表反映在辅助表中。