Java Hibernate UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联
我知道有很多人都有同样的问题,但我尝试了很多解决方案,总是遇到同样的问题,这就是为什么我下次再问的原因 sql 在我的cas中,我有3门课 zone.javaJava 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
@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