![]() |
1
29
你有两个不同的问题。让我们先简单一点。 javax.ejb.EJBTransactionRolledback异常:未管理实体
这个
如果你想
正在刷新ItemStatus列表
您正在与Hibernate的交互
这对
这个
这意味着,在两次执行
长话短说:使用Hibernate,无论何时您想在单个事务中加载一个实体,然后从数据库中获取对该实体的其他更改,都必须明确
您希望如何处理这一问题在一定程度上取决于您的用例。我可以马上想到两个选项:
一些附加说明 讨论了使用查询提示的问题。以下是它们不起作用的原因: org.hibernate.cacheable=错误 只有当您使用 查询高速缓存 ,只有在非常特殊的情况下才建议使用。即使您正在使用它,它也不会影响您的情况,因为查询缓存包含对象ID,而不是数据。
org.hibernate.cacheMode=刷新
这是Hibernate的指令
second-level cache
。如果打开了二级缓存,并且您从不同的事务发出了两个查询,那么您将在第二个查询中获得过时的数据,此指令将解决问题。但是,如果您在两个查询中处于同一会话中,则二级缓存只会起作用,以避免为新的实体加载数据库
|
|
2
1
选项之一-为特定查询结果绕过JPA缓存:
在这个网站上可以找到许多其他的调优和配置技巧 http://docs.oracle.com/javaee/6/tutorial/doc/gkjjj.html |
![]() |
3
0
您必须引用由返回的实体
这样你就应该摆脱
更新 也许退回新系列更安全:
或者,如果您可以访问这样的实体ID,则可以更有效:
|
![]() |
4
0
试着做标记
|
![]() |
5
0
在正确调试之后,我发现我团队中的一位开发人员将它注入到DAO层中-
因此,为了进行合并,它被缓存,查询使用返回相同的陈旧数据,即使本机sql查询中涉及的表的某一列中的数据已经更改。 |
![]() |
TheCrunchyPotato · JPA查询找不到正确的构造函数 2 年前 |
![]() |
Maiko Kingma · hibernate何时加载映射关系 6 年前 |
![]() |
OOvic · 使用JoinTable实现多个关系中的JPQL查询 6 年前 |
![]() |
Jovan0042 · 在H2中持久化多个实体引发异常 6 年前 |
![]() |
Nemeth Attila · 如何编写多对多关联表的查询 6 年前 |