java - Hibernate 删除用户和 user_type 而不是只删除用户
问题描述
我正在开发一个带有 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 中检查了“On delete set null”和“On update cascade”,并且设置正确。
我调试了通用删除 DAO 方法,它只被调用一次。
我认为这是休眠的问题,我应该指定只想删除我在方法上指定的对象,而不是他的孩子。
通用删除 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;
...
}
我只想删除该用户,然后休眠删除 user(id=14) 行和 user_type(id=14) 行:
解决方案
我不明白为什么在您可以控制应用程序时使用辅助表注释更好的设计是创建单独的实体,然后使用 manytoone annotaion 映射它们,就像辅助表一样,我的猜测是它在主表中执行的操作的默认行为是反映在二级表中。
推荐阅读
- java - 类的Java语法
- docker - Docker-compose postgres 表未显示在 Navicat 上
- swift - 如何以编程方式设置控制图像视图宽度的滑块
- oracle - 如何从oracle数据库中提取数据并保存在谷歌云平台
- firebase - 为 Google Analytics(分析)网络 + 应用程序属性安排电子邮件报告
- django - 位置参数缺少“状态”
- java - 如何让 Spring Tools Suite 识别 spring 注释
- mongodb - Mongo DB中基于光标的分页,其中跳过或限制未知
- laravel - 如何在 plesk 服务器上处理 SQLSTATE[HY000] [1045] 错误?
- javascript - 使用 HTML、CSS 和 JS 的侧边栏中的多级下拉菜单