Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联_Java_Hibernate_Jpa_Save_Embeddable - Fatal编程技术网

Java Hibernate UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联

Java Hibernate UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联,java,hibernate,jpa,save,embeddable,Java,Hibernate,Jpa,Save,Embeddable,我知道有很多人都有同样的问题,但我尝试了很多解决方案,总是遇到同样的问题,这就是为什么我下次再问的原因 sql 在我的cas中,我有3门课 zone.java @Entity @Table(name = "ZONE") @SequenceGenerator(name="ZONE_SEQ", sequenceName="ZONE_SEQ", allocationSize=1) public class Zone implements Serializable { private st

我知道有很多人都有同样的问题,但我尝试了很多解决方案,总是遇到同样的问题,这就是为什么我下次再问的原因

sql

在我的cas中,我有3门课

zone.java

@Entity

@Table(name = "ZONE")

@SequenceGenerator(name="ZONE_SEQ", sequenceName="ZONE_SEQ", allocationSize=1)
public class Zone implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ZONE_SEQ")
    @Column(name = "IZONE_ID", nullable = false, unique = true)
    private Long id;

    @Column(name = "SZONE_NAME", length = 20)
    private String zoneName;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "IZONE_ID")
    private Set<ZoneStation> stationList;

//getter + setter
和ZoneStationId.java

@Embeddable
public class ZoneStationId implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "IZONE_ID")
    private Long zoneId;

    @Column(name = "SSTATION_CODE", length = 3)
    private String stationCode;
ZoneDetail是一个类,它包含来自jsp的信息以创建区域:

ZoneDetail ZoneDetail=新的ZoneDetail();
zoneDetail.initFromScreen(参数)

及 ZoneDetail.java

公共类ZoneDetail实现java.io.Serializable{
私有java.lang.String代码;
私有java.lang.String名称;
公共静态最终内部NB\U详图\U站=10;
公共字符串[]listStation=null;

从屏幕开始

public void initFromScreen(Hashtable params) {

    setCode((String) ToolsRequest.getParam(params, "zoneCode"));
    setName((String) ToolsRequest.getParam(params, "zoneName"));

    for (int i = 0; i < NB_DETAIL_STATION; i++) {
        if ((String) ToolsRequest.getParam(params, "StationsznameStationszname" + i) != null) {
            String StationName = 
                ((String) ToolsRequest.getParam(params, "StationsznameStationszname" + i));
            setListStation(i, StationName);
        }
        }
    }
我有一个休眠对象异常 实际上,我用了2天的时间尝试了衍射解,但我没有检查我的错误在哪里

对于堆栈跟踪:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.airfrance.vtruck.entity.ZoneStation#ZoneStationId [zoneId=null, stationCode=]]
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143)
    at org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener.saveWithGeneratedId(EJB3SaveOrUpdateEventListener.java:62)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677)
    at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:252)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
    at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
    at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:127)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:376)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:350)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673)
    at com.afklm.jraf.provider.persistence.hibernate.AbstractDAOGenericImpl.saveOrUpdateNoFlush(AbstractDAOGenericImpl.java:640)
    ... 71 more

感谢您的回复,并对我的英语不好表示歉意;)

上下文是什么?zoneDetail来自哪里?添加堆栈跟踪。我添加堆栈跟踪@alan HayAnd zoneDetail脚本上下文是什么?zoneDetail来自哪里?添加堆栈跟踪。我添加堆栈跟踪@alan HayAnd zoneDetail脚本
public void initFromScreen(Hashtable params) {

    setCode((String) ToolsRequest.getParam(params, "zoneCode"));
    setName((String) ToolsRequest.getParam(params, "zoneName"));

    for (int i = 0; i < NB_DETAIL_STATION; i++) {
        if ((String) ToolsRequest.getParam(params, "StationsznameStationszname" + i) != null) {
            String StationName = 
                ((String) ToolsRequest.getParam(params, "StationsznameStationszname" + i));
            setListStation(i, StationName);
        }
        }
    }
Zone insertZone = new Zone();
    Set<ZoneStation> zoneStationSet =  new HashSet<ZoneStation>();
    //initialisae the Set
    ListDetailsStation = Arrays.asList(zoneDetail.getListStation());
      if (ListDetailsStation.size() > 0){
         Iterator i = ListDetailsStation.iterator();
            while(i.hasNext()){         
                ZoneStationId detailId =  new ZoneStationId();
                ZoneStation zoneStation = new ZoneStation();
                detailId.setStationCode(i.next().toString());
                zoneStation.setId(detailId);
                //zoneStation.setZone(insertZone); 
                zoneStationSet.add(zoneStation);    
            } //end While
        } //end if

insertZone.setZoneName(zoneDetail.getName()); //OK
insertZone.setStationList(zoneStationSet); //OK
zoneDAO.saveOrUpdate(insertZone);
zoneDAO.saveOrUpdate(insertZone);
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.airfrance.vtruck.entity.ZoneStation#ZoneStationId [zoneId=null, stationCode=]]
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143)
    at org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener.saveWithGeneratedId(EJB3SaveOrUpdateEventListener.java:62)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677)
    at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:252)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
    at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
    at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:127)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:376)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:350)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673)
    at com.afklm.jraf.provider.persistence.hibernate.AbstractDAOGenericImpl.saveOrUpdateNoFlush(AbstractDAOGenericImpl.java:640)
    ... 71 more