我有以下实体:
@Entity
public static class Parent {
@Id
@GeneratedValue
private Long id;
String st;
@OneToMany(mappedBy = "parent")
Set<Child> children = new HashSet<>();
// get,set
}
@Entity
public static class Child {
@Id
@GeneratedValue
private Long id;
String st;
@ManyToOne()
private Parent parent;
//get,set
}
但看起来像是黑客。
所以,1。我做错了什么?看起来,直接删除子实体
2是正确的。有没有更优雅的方法来处理这个?
可复制的例子:
@Autowired
PrentCrud parentDao;
@Autowired
ChiildCrud childDao;
@PostConstruct
public void doSomething() {
LogManager.getLogger("org.hibernate.SQL").setLevel(Level.DEBUG);
Parent p = new Parent();
p.setSt("1");
Child e = new Child();
e.setParent(p);
e.setSt("c");
p.getChildren().add(e);
Parent save = parentDao.save(p);
e.setParent(save);
childDao.save(e);
Parent next = parentDao.findAll().iterator().next();
next.setSt("2");
next.getChildren().size();
childDao.deleteAll();
next.getChildren().clear();
if (next.getChildren() instanceof PersistentSet) { // this is hack, not working without
((Map)((PersistentSet) next.getChildren()).getStoredSnapshot()).clear();
}
parentDao.save(next); // exception is thrwn here without hack
System.out.println("Success");
}
您尝试过将fetch类型更改为eager吗?关系的默认值onetomany:LAZY manytoone:eary manytomany:LAZY onetoone:eary
也许它被缓存是因为fetch方法
我有两个具有一个任意关系的表 类ServiceProvider{ ... @OneTomany(Fetch=FetchType.Eager,MappedBy=“ServiceProvider”,Cascade={CascadeType.All,CascadeType.Remove},OlphanRemove=true)@OnDelete(action=OnDeleteAction.Cascade)
问题内容: 我有两个分别以双向一对多关系存在的实体类 A 和 B。 A.java: B.java 在一个简单的控制台应用程序中,我从数据库中获取了特定的 A 行,并尝试删除其详细信息 B 行(随机),但是 JPA / Hibernate* 不仅删除了该行-甚至没有向该行发出任何 DELETE 语句。数据库。删除 B 行的唯一方法是从 A.java 的集合( LinkedHashSet )中删除相应
我读过一些相关的问题,但它们和我的问题不完全一样。 我使用的是JPA Hibernate Spring,我想做一些我不确定是否仅通过配置就可以做到的事情。 我的域类具有或多或少复杂的关系。有许多元素与一个元素相关(就像是一棵树,许多元素是一个元素的子元素)。 类似的东西: 这样会得到一张桌子: 当我删除id=1的行时,我希望删除id=2和id=3的行(这可能是递归的,parent_id=2并且pa
在使用Hibernate删除与子实体具有关系的JPA实体时,我遇到了一个问题,但是在使用EclipseLink而不是Hibernate作为JPA提供程序时,相同的代码可以正常工作。父实体上的批注是 当使用Hibernate时,它尝试将子实体上的join列设置为null,但由于该列不允许null而失败。使用EclipseLink时,它首先删除子实体,然后删除父实体,这是所需的行为。 我的问题是: 为
我用的是SpringBoot和JPA Hibernate。 我有这些实体: 当我尝试删除父实体(Post)时,所有相关实体注释都保留在数据库中。为什么级联删除不起作用?
我在Spring MVC服务器中有2个JPA实体。其中一个是“父母”,另一个是孩子。正如我在这里读到的(原因4),当我有父实体和子实体时,首先必须删除父实体,然后删除子实体。它正在制作一个组织。冬眠例外约束ViolationException 父实体项目 儿童实体回复 我尝试在我的控制器中的“@Request estMap(value="ete")”中删除它们 但ConstraintViolati