У меня есть проект с 2 частями. Одним из них является веб-сервис, а другим - КЛИЕНТ, делающий XML SOAP запросов к этому веб-сервису.
Я получаю эту ошибку при вызове моего веб-сервиса Hibernate-Spring SOAP (сгенерированный с / Apache CXF 2.7) в SOAPUI:
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [org.game.model.HeroChampion#SS12345]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.game.model.HeroChampion#SS12345]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:668)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:408)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
Внутри моей модели WEBSERVICE HeroChampion. java имеет один-ко-многим объект коллекции внутри:
..fields here..
private String heroIDPk;
private Integer healthBar;
private Integer manaBar;
private Collection heroSkills;
/**
*
* @hibernate.set inverse="true" cascade="none" order-by="SS_HERO_SKILLS ASC"
* @hibernate.collection-key column="SS_HERO_SKILL_ID_FK"
* @hibernate.collection-one-to-many class="org.game.model.HeroChampion" lazy="false"
* @struts.form-field
*/
public Collection getHeroSkills() {
return this.heroSkills;
}
public void setHeroSkills(Collection heroSkills) {
this.heroSkills= heroSkills;
}
... more getters and setters ...
Теперь в моем КЛИЕНТЕ у меня есть такой метод:
@RequestWrapper(className = "org.game.webservice.jaxws.HeroChampion", localName = "saveHeroChampion", targetNamespace = "http://webservice.game.org")
@ResponseWrapper(className = "org.iom.uktb.webservice.jaxws.SaveHeroChampionResponse", localName = "saveHeroChampionResponse", targetNamespace = "http://webservice.gameorg/")
public void saveSputumSmearTest(String heroIDPk, String skill1){
sputumSmearTestManager = (SputumSmearTestManager) BeanRetriever.getBean("sputumSmearTestManager");
HeroChampion heroChampion = new HeroChampion ();
HeroChampionBean heroChampionBean = new HeroChampionBean ();
heroChampionBean.setHeroIDPk(heroIDPk);
heroChampionBean.setSkill1(skill1);
try{
BeanUtils.copyProperties(sputumSmearTest, sputumSmearTestBean);
sputumSmearTestManager.saveSputumSmearTest(sputumSmearTest, true);
}catch(Exception e){
e.printStackTrace();
}
}
В моем HeroChampion есть много полей. java класс, который я не включаю в метод saveHeroChampion, например private Collection heroSkills;
и другие поля.
Можете ли вы дать мне подсказку, как решить эту проблему.