Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传递给persist的分离实体:JPA继承_Java_Hibernate_Jpa_Orm_Hibernate Mapping - Fatal编程技术网

Java 传递给persist的分离实体:JPA继承

Java 传递给persist的分离实体:JPA继承,java,hibernate,jpa,orm,hibernate-mapping,Java,Hibernate,Jpa,Orm,Hibernate Mapping,我有一个从车辆继承的类总线。这是一个JPA单表继承(鉴别器列的类型为:“B”表示总线)。 当我试图持久化一个总线时,我得到了这个错误。 原因可能是什么?谢谢 Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: org.enseirb.it307.tp.entities.VehicleStatus at org.hibernate.event.internal.Defa

我有一个从车辆继承的类总线。这是一个JPA单表继承(鉴别器列的类型为:“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

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

@Override
public Vehicle insertVehicle(Vehicle vehicle) {

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

请向我们展示导致此错误的代码。我添加了导致此错误的代码否,这是对DAO的调用,而不是实际的持久化。我添加了DAO代码
createdToulouseOrg.addVehicle(bus1)
做什么?