Hibernate3.HibernateSystemException: другой объект с тем же значением идентификатора уже был связан с сеансом - PullRequest
0 голосов
/ 03 марта 2020

У меня есть проект с 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; и другие поля.

Можете ли вы дать мне подсказку, как решить эту проблему.

...