我这里有一个奇怪的问题,如果我错了,请原谅我。
我这里的问题是,我在应用程序中为两个实体定义了一个manytone映射。删除时,我想忽略删除其他实体。
假设Emp到Dept有多个关系,我正在通过会话删除Emp记录。删除(EmpId),此时我不想删除与Emp实体关联的部门。
我不能在hbm中改变级联选项。
这种情况类似于
“如果有10个emp属于部门编号101,并且在删除任何一个emp时,它也将尝试删除关联的部门,这是不可能的,因为我们有一些属于同一部门的其他emp记录”
所以,有没有一种方法可以在按语法删除emp记录时忽略删除dept记录。为什么语法是,但在这里我需要考虑级联选项删除最后EMP记录相关的DePT 101记录。我不想考虑级联选项,而删除前9个EMP对象。
请建议我在这种情况下工作。
谢谢!
根据您的问题,我创建了如下实体类,以适当的方式解释我的答案,
注意:-实体类只是我的假设,您可能以不同的方式实现它
@Entity
@Table(name="EMPLOYEE")
public class Emp implements Serializable {
@Id
@GeneratedValue()
@Column(name="ID")
private Long empId;
@ManyToOne
@JoinColumn(name="DEPARTMENT_ID")
private Dpt department;
other property
... getter() setter()
}
@Entity
@Table(name="DEPARTMENT")
public class Dpt implements Serializable {
@Id
@GeneratedValue()
@Column(name="ID")
private Long dptId;
@OneToMany(mappedBy = "department",cascade=CascadeType.ALL)
@Cascade(CascadeType.DELETE_ORPHAN)
private Set<Emp> employeeSet;
other property
... getter() setter()
}
根据您的要求,我在上面的代码片段中创建了双向关联
问题1
假设Emp到Dept有多个关系,我正在通过会话删除Emp记录。删除(EmpId),此时我不想删除与Emp实体关联的部门。
在这里回答你的表演
session.delete(EmpId)
在您的代码中,如果您正在执行以下操作
@ManyToOne
@JoinColumn(name="DEPARTMENT_ID",cascade=CascadeType.ALL)
private Dpt department;
or
@ManyToOne
@JoinColumn(name="DEPARTMENT_ID",cascade=CascadeType.DELETE)
private Dpt department;
然后只有JPA尝试删除父(Dpt)而删除子(Emp)
注意:-切勿将级联与@ManyToOne一起使用
在这里,如果您从@ManyToOne中删除cascade,应该可以解决您的问题(在删除子项(Emp)的同时删除父项(Dpt))
问题二
在删除与DePT 101记录相关联的上次EMP记录时,需要考虑级联选项。我不想考虑级联选项,而删除前9个EMP对象。
对于可以使用的9个emp对象,您可以编程处理上述情况场景
session.delete(EmpId)
还有第十个雇员
session.delete(DptId)
这里是我在上面使用的代码
@OneToMany(mappedBy = "department",cascade=CascadeType.ALL)
@Cascade(CascadeType.DELETE_ORPHAN)
private Set<Emp> employeeSet;
这里运行的@Cascade(CascadeType.DELETE_ORPHAN)
是删除所有子(Emp)实体,如果删除父(Dpt)实体,在您的情况下,删除Dpt实体也会删除与该部门相关的最后一个Emp记录
希望这对你有帮助
谢谢
尝试用HQL删除它,它会忽略级联配置。
session.createQuery("delete from Employee where id = ?").setParameter(0, empId).executeUpdate();
但是,如果已经加载到Hibernate会话中的其他实体仍然引用您删除的实体,您可能会得到EntityNotFoundExcema
。你必须自己处理这件事。
问题内容: 我有一个颜色枚举 我有包含它的MyEntity。 我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要UserType还是最简单的方法? 谢谢 编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释 问题答案: 我使用EnumSet映射线程中的解决方案,该解决方案依赖
我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。
我们必须在可选元素“mappedby”中指定什么。是特定模型的table_name还是classname? 哪个是正确的? 这个
是否可以在不映射一对多关系的情况下设置级联? 我有两个实体: 和 如果我试图删除一个用户,并且存在该用户的任何记录,那么由于外键的原因,它显然会失败。我想在删除用户之前删除该用户的所有记录。我看到两种选择: > 映射s为关系中的,并设置。 在删除用户之前手动删除它们 有没有第三个选项,如何在用户实体中设置无映射记录的级联?
我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:
<![CDATA[插入MEMBER_SERVICE_RECORD(MEMBER_ID,SERVICE_DATE,service_milees,SERVICE_DESC,MODIFIED_DATE)值(?,?,?,?,?)]]>