问题标签 [hibernate-cascade]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jpa - JPA Hibernate 在子级(反面)上使用 CascadeType.PERSIST
我在 NaturalPerson 和 Client 实体之间有 2-way 关联,我想在持久化 Client 的同时保持 NaturalPerson ,并且在持久化 NaturalPerson 时反向保持 Client 。为了实现这一点,我在客户和 NaturalPerson 之间建立了一对一的关系,其中 NaturalPerson 是拥有方,而客户是反方。接下来,我在两侧添加了 {CascadeType.PERSIST, CascadeType.REMOVE} 的级联属性。这就是问题所在,即我遇到了这样的错误
当我首先创建 NaturalPerson 实例和下一个 Client 实例,然后在 Client 上设置此 NaturalPerson(在反面设置所有者)时,会发生此错误。但是,当我以相反的方向执行此操作时,即首先在 NaturalPerson 上设置客户端,而不是仅保留客户端(反面),而不是创建这两个相关实体的单元测试通过良好(一切似乎都正常)
hibernate - JPA级联无不起作用
设想:
- 每当在视图中访问 A 时,A 的状态就会改变。
- A 可以被许多用户访问。
- 一旦访问 A,就会为每个打开 A 的用户创建(如果不存在)或更新 B 的实例。
- B 总是引用 A 的状态改变实例。
- 由于我没有在 B 类(对于 A 类)的 ManyToOne 映射中提到级联类型,我假设默认值为无级联。
但是每当我在视图中打开 A 时,当 B 持续存在时,状态更改的 A 也会持续存在。当我坚持 B 时,我不希望 A 坚持下去。我该如何实现?
java 1.8、休眠 4.3.7、wildfly 8.2
通用保存方法:
持久性 xml:
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="bla_bla" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/bla</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.event.merge.entity_copy_observer" value="log"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform"/>
<!-- enabling L2 cache -->
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
<property name="hibernate.generate_statistics" value ="false" />
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="jadira.usertype.databaseZone" value="UTC"/>
<property name="jadira.usertype.javaZone" value="UTC"/>
<property name="jadira.usertype.autoRegisterUserTypes" value="true"/>
</properties>
</persistence-unit>
</persistence>
hibernate - 防止删除级联到实体实例
考虑以下 JPA 实体:
注意从CartItem
到的关联Stock
。此关联已被注释,因此更改购物车项目数量会在另一个方向影响其可用库存,也就是说,如果购物车项目数量增加,产品的可用库存数量会减少,反之亦然。
这使我可以开火cartRepository.save(cart)
,保存所有购物车物品并同时更新其库存(由于Cascade.ALL
from Cart
to CartItem
)。只要购物车项目的数量非零,这就可以正常工作。
但是,当cartRepository.save(cart)
在调用 之后调用cart.removeItem(item)
时,级联也会尝试删除购物车项目的库存,这不是本意。应删除购物车项目,但应简单地更新其相关库存。有没有办法从 to 级联更新CartItem
,Stock
但级联删除CartItem
作为更新Stock
?
java - Ask Hibernate to not perform the cascade when using a join table?
When I delete a record from table r, it in turn deletes a record from a linking table b because r has a Many-To-Many relationship with b and I am using Hibernate Join Table to associate them. Here is where my problem comes: I have a view that relies on that linking table, b, and the result of deleting r causes a delete from the view but now that view record is no longer there. I get a Stale State exception because of this.
Can I ask Hibernate to ignore cascade deletes? I have tried evicting the b table records before trying to delete, but that doesn't appear to work.
hibernate - 为什么 Hibernate 不设置子项对父项的引用?
考虑类家长:
和班级孩子:
如果我在应用程序内部创建一个新的孩子并将其放在Parent的children字段中,然后将Parent对象持久化,为什么Hibernate不会自动更新Child的父字段(以便设置parentID列)目的?
hibernate - 删除时出现 Hibernate ConstraintViolationException
我有 2 个实体,它们是地理围栏和设备,一旦用户将一个地理围栏分配给某个设备,就会创建一个由 GeofenceDevice 实体表示的关联。
问题是,一旦我想删除一个 GeofenceDevice 对象,我就会得到一个错误:
这是我的代码:
设备实体
地理围栏实体
地理围栏设备实体
这是日志的链接
java - Hibernate:更新父级时更新子级
更新包含另一个对象集合的对象时,我在 Hibernate 中遇到问题。这是它的样子:
然后是 Car 类:
然后车库有一项服务:
现在假设我的数据库中有一个带有白色、蓝色和红色汽车的车库。
如果我用同一个车库但只有一辆蓝色和一辆红色的汽车调用我的更新方法,则更新成功。数据库从 Car 表中删除了白色汽车。
但是,如果我使用同一个车库但使用空的汽车集合调用我的更新方法,则不会从 Car 表中删除任何汽车。
有什么想法我可能做错了吗?
hibernate - 当实体列表为空时,如何保存具有实体列表的实体
这是我的第一个问题。我希望我能在这里得到任何提示来解决我的问题。
我将休眠用于我的应用程序。这是我的代码。
我希望在自动保存 A 时可以保存 bList。有用。
但是当bList 为 null时存在一个大问题。 hibernate 尝试用 A 保存 bList,即使 bList 是 null。
所以它会产生这个错误。
ORA-01400: 无法将 NULL 插入 ("MYTEMPTB"."TB_B"."B_ID")
我该如何解决?请给我一些提示。谢谢。
java - JPA 实体层次结构合并导致“同一实体的多个表示”异常
我有一个实体层次结构,它在 Web 界面中表示和编辑,并保留在我的 Web 应用程序的数据层中。为了使持久化更容易,我用 CascadaType.PERSIST 和 CascadeType.MERGE 注释了一些实体 - 但这会导致持久化和合并异常!
这里的实体:
- 地址有土地
- Anfrage 有地址.land
- Angebot 有 adresse.land 和 anfrage.adresse.land
实体类是从一些 XML 源生成的,因此很难定义哪些实体应该使用级联,哪些不应该!
这里是 Anfrage 的服务——Angebot 和 Adresse 也有类似的服务:
这里是存储库——代表数据访问层
在这里我的 Arquillian 测试 - 相同的错误/异常出现在应用程序中
使用 save / persist 会导致异常说 anfrage.angebot 无法保存,因为它已分离!
使用更新/合并会导致异常,说 anfrage.adresse.land 和 angebot.land 是同一个实体,因此无法合并!
我是否必须为我的实体层次结构手动处理持久/合并?
我认为级联 PERSIST 和 MERGE 会使事情变得更容易,但似乎更容易导致麻烦?!
我正在使用 Wildfly 9,但使用 Wildfly 10 时遇到了同样的错误!
欢迎任何提示 - 谢谢!
hibernate - 休眠子表记录没有被删除
我有两个具有父子关系的表,如下所示:
这里的 CascadeType 是 javax.persistence.CascadeType。现在我正在尝试使用以下查询仅删除子表中特定父表 id 的子表记录:
但我收到以下异常:
Kinldy 提出同样的建议,我在哪里做错了?