gpt4 book ai didi

java - 分离的实体传递到持久化 : JPA inheritance

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:29 25 4
gpt4 key购买 nike

我有一个继承自 Vehicle 的 Bus 类。它是 JPA 单表继承(鉴别器列是 TYPE :“B”表示总线)。当我尝试保留总线时,出现此错误。可能是什么原因?谢谢

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: org.enseirb.it307.tp.entities.VehicleStatus
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:139)
at org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:838)
at org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:831)
at org.hibernate.engine.spi.CascadingActions$8.cascade(CascadingActions.java:357)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:379)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:319)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:296)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)
at

导致错误的代码:

//Bus
Bus bus1 = BusTools.getSampleBus1();
createdToulouseOrg.addVehicle(bus1);
logger.info("insert Bus " + bus1);
Vehicle createdBus1 = vehicleDao.insertVehicle(bus1);

insertVehicle方法使用entitymanager.persist

@Override
public Vehicle insertVehicle(Vehicle vehicle) {

entityManager.getTransaction().begin();
entityManager.persist(vehicle);
entityManager.getTransaction().commit();
return vehicle;
}

最佳答案

根据日志,车辆包含与一个或多个 VehicleStatus 实体的关联。

出现“分离实体已传递到持久化”错误,因为持久化操作也级联到 VehicleStatus

最简单的修复方法是调用 merge 而不是 persist:

@Override
public Vehicle insertVehicle(Vehicle vehicle) {

entityManager.getTransaction().begin();
vehicle = entityManager.merge(vehicle);
entityManager.getTransaction().commit();
return vehicle;
}

关于java - 分离的实体传递到持久化 : JPA inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27899443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com