【发布时间】:2017-11-04 16:52:36
【问题描述】:
我有一个关于将 springboot 与 thymeleaf 和关系管理一起使用的问题。
我有三个需要完全双向的对象:
obj1(Many)--TO--(One)obj2(One)--TO--(Many)obj3
他们已经设置好了:
public class Obj1 {
@Id
private long id;
@ManyToOne(cascade=CascadeType.ALL)
private Obj2 obj2;
public class Obj2 {
@Id
private long id;
@OneToOne
private User planUser
// Other fields
@OneToMany(mappedby = obj2)
private List<Obj1> obj1;
@OneToMany(mappedby obj2)
private List<Obj3> obj3;
public class Obj3 {
@Id
private Long id;
@ManyToOne
private Obj2 obj2;
在视图方面,有一个名为 view1 的页面,用于填充 Obj1。这行得通。
还有一个名为 view2 的页面: 1. 显示来自 Obj1 的一些基本细节 2. 填充/更新 Obj2 和 Obj3
问题在于提交 view2 以更新/创建 Obj2 和 Obj3。
我试图让控制器调用 Obj1 服务上的方法:
@Override
@Transactional
public Obj1 associateObj1ToObj2(Long Obj2Id, Obj1 newObj1) {
final Obj2 obj2 = ojbj2Repository.findOne( obj2Id );
obj2.getObj1().add( newObj1);
newObj1.setObj2( obj2 );
return obj1Repository.save( newObj1 );
}
问题:
- 即使当我尝试在 associateObj1ToObj2 中调用表单控制器 obj2Repo.save(obj2) 中的 @Post 时,本应保存的值(如 userPlan)却没有。为什么?
- 在上述情况下,单个根对象是否可以并且应该为多个页面提供服务? (建议的替代方案显然是创建一个混合类来用于支持像 view2 这样的页面 - 链接到 git 示例很棒(这是否称为 DTO))。
- springboot不会处理关系设置是否正确,至少在childs child需要更新的情况下)
- Hibernate 会话的生命周期是什么?
注意:许多关系确实应该被称为少数 - 关系上的集合几乎总是少于 10。
这个答案似乎部分相关:Could not initialize proxy - no Session
【问题讨论】:
-
IMO,你最好一次问一个问题。如果您花时间提供minimal, complete, verifiable example
-
这会很棘手,因为我需要复制项目,然后重构和混淆。
-
@AndyWilkinson 有帮助:github.com/bigalnz/mvce/tree/master
-
不是,不是。它很小,但并不完整。
-
@AndyWilkinson 现在试试我添加了控制器
标签: hibernate spring-boot thymeleaf