簡體   English   中英

傳遞給持久對象的獨立實體:JPA繼承

[英]detached entity passed to persist: JPA inheritance

我有一個從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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM