我已经能够让JPA / Hibernate ON DELETE CASCADE
成功复制功能(似乎是默认行为),但是我现在正在尝试复制ON DELETE SET NULL
功能,并且遇到了问题。
这是我的两节课:
@Entity
@Table(name = "teacher")
public class Teacher
{
@Id
@GeneratedValue
@Column(name = "id", nullable = false, length = 4)
private int id;
@OneToMany(mappedBy = "teacher")
private List<Student> studentList;
// ...
}
@Entity
@Table(name = "student")
public class Student
{
@Id
@GeneratedValue
@Column(name = "id", nullable = false, length = 4)
private int id;
@ManyToOne(optional = true)
@JoinColumn(name = "teacher_id", nullable = true)
private Teacher teacher;
// ...
}
当我尝试删除老师时,出现以下错误:
org.springframework.dao.DataIntegrityViolationException:无法执行JDBC批处理更新。SQL
[从教师那里删除,其中Teacher_id =?];约束[null]
…
原因:org.hibernate.exception.ConstraintViolationException:无法执行JDBC批更新
…
原因:java.sql.BatchUpdateException:批处理条目0从教师中删除,教师_id
=‘1’被中止。调用getNextException以查看原因。
难道我做错了什么?这是可以实现的吗?
谢谢。
目前使用jpa / hibernate似乎还不可能。
JBs解决方案似乎很干净:
for (Department child : parent.getChildren()) {
child.setParentDepartment(null);
}
session.delete(parent);
您还应该能够将其放入PreRemove中:
@PreRemove
private void preRemove() {
for (Student s : studentList) {
s.setTeacher(null);
}
}
问题内容: 在JPA中,有什么方法可以复制Hibernate的saveOrUpdate行为, 它实质上检查数据库中是否已存在该对象,并根据需要更新该对象或保存该对象的新实例。 JPA无事务读取很不错,但是Hibernate确实缺少这种方法。有经验的JPA开发人员如何处理此问题? 问题答案: 尝试使用该方法-这非常相似。 Xebia的博客文章中对差异有一个很好的描述:“ JPA实施模式:保存(独立)
我在实体之间有一对多的关系。执行此JPQL查询时: 从父项选择父项加入父项。孩子在哪里。。。 当一位家长有两个孩子时,我会得到重复的记录,当一位家长有一个孩子时,我只会得到一条记录,当没有孩子时,我会得到一条记录(如果没有孩子,我就没有记录)。请注意,SQL数据库中没有重复的父数据库。 实体声明如下: 为了简洁起见,我省略了很多代码,但这应该会让你对我要做的事情有一个清晰的认识。请注意,关系是在父
用户详细信息 有人能看出我做错了什么吗?
问题内容: 我想在数据库中复制实体集合。我使用以下方法检索该集合: 现在,我想复制“类别”列表,并使用EntityManager保留它。我正在使用JPA /hibernate。 更新 在知道如何分离我的实体之后,我需要知道要分离什么:当前代码: 这引发了异常。 我认为他想重新加载类别,因为我已经将它们分离了。我现在该怎么办? 问题答案: 亚伦·迪吉拉(AaronDiguila)的答案是去这里的方式
问题内容: 我想以一种可为我的系统恢复的方式重命名PostgreSQL(9.6)表(使用JPA / Hibernate的Java应用程序) 在我的Java代码中,JPA实体将具有以下注释 ,数据库将具有名为的等效表。 我想将表重命名为,以便可以逐步更新数据库和Java应用程序,从而允许失败和回滚。 典型的步骤是 创建in的副本 确保两种读/写都可用(即,两种方式都复制了数据) 更新Java应用程序
问题内容: 我在为某些实体设置jpa映射时遇到麻烦。我有一个如下定义的父实体。 然后,我有一个带有复合键的子实体,以及此表的主键的外键,如下所示: 我知道子实体不正确,但是我不确定如何将其设置为具有复合PK。我知道我需要设置一个PK类,但是当一个字段是父类的外键时,我不确定该怎么做。一旦设置好,父级将如何引用子级实体? 任何帮助表示赞赏。 问题答案: 这受JPA 2规范的 第2.4.1节“与派生身