Java 在JPA/Hibernate中合并/重新连接而不更新数据库
在OSIV Web环境中使用JPA/Hibernate让我抓狂;) 下面的场景:我有一个通过JPA加载的实体A,它有一个B实体的集合。这些B实体有一个必填字段 当用户通过按webapp中的链接向a添加新B时,不会设置该必填字段(因为没有合理的默认值) 在下一个http请求时,OSIV过滤器尝试合并A实体,但失败了,因为Hibernate抱怨没有设置新B的必填字段Java 在JPA/Hibernate中合并/重新连接而不更新数据库,java,hibernate,web-applications,jpa,Java,Hibernate,Web Applications,Jpa,在OSIV Web环境中使用JPA/Hibernate让我抓狂;) 下面的场景:我有一个通过JPA加载的实体A,它有一个B实体的集合。这些B实体有一个必填字段 当用户通过按webapp中的链接向a添加新B时,不会设置该必填字段(因为没有合理的默认值) 在下一个http请求时,OSIV过滤器尝试合并A实体,但失败了,因为Hibernate抱怨没有设置新B的必填字段 javax.persistence.PersistenceException: org.hibernate.PropertyValue
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value
阅读JPA规范,我看不到在合并阶段需要这些检查的迹象(我没有激活的事务)
我不能将B的集合保留在A之外,而只能在用户按下“保存”(也称为entitymanager.persist())时将它们添加到A,因为保存按钮所在的位置不知道B,只知道A
A和B也是唯一的例子,我到处都有类似的东西
有什么想法吗?其他JPA实现在这里的行为是否相同
提前感谢。我做了很多阅读和测试。这个问题来自我对JPA/Hibernate的误解。merge()始终对数据库执行命中操作,并为实体安排更新。我在JPA规范中没有发现任何提到这一点的地方,但《带Hibernate的Java持久化》一书确实提到了这一点 通过EntityManager(以及会话作为回退)API查看,似乎无法将实体分配到当前持久性上下文而不安排更新。毕竟,我想要的是浏览对象图,根据需要更改属性,并在以后触发更新(如果需要,使用版本检查)。我认为每个使用ORM的网络应用都必须做些什么 我正在寻找的基本工作流程: