2014-10-30 51 views
0

我是新來的,我希望能夠爲我的問題找到一個解決方案。我有一個異常org.hibernate.PersistentObjectException與ManyToMany關係中保存數據。我使用Spring框架和Maven。org.hibernate.PersistentObjectException與組合Spring,Maven和Hibernate

這是我對Hibernate註解

//class Result 
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinTable(name = "result_player", 
      joinColumns = { @JoinColumn(name = "result_id", nullable = true) }, 
      inverseJoinColumns = { @JoinColumn(name = "player_id", nullable = true) }) 
private List<Player> players; 

//class Player 
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,mappedBy="players") 
private List<Result> results; 

部分在應用context.xml文件Hibernate和JDBC設置

<!-- ORM, Hibernate, JDBC --> 
<context:property-placeholder location="classpath:cfg/properties/jdbc.properties"/> 

<bean id="dataSource" 
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
    p:driverClassName="${jdbc.driverClassName}" 
    p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
    p:password="${jdbc.password}" /> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="mytable.scores.model" /> 
    <property name="jpaPropertyMap" ref="jpaPropertyMap" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
</property> 
</bean> 

<util:map id="jpaPropertyMap"> 
    <entry key="hibernate.dialect" value="${jdbc.dialect}" /> 
    <entry key="hibernate.show_sql" value="true" /> 
    <entry key="hibernate.format_sql" value="true" /> 
    <entry key="hibernate.hbm2ddl.auto" value="update" /> 
    <entry key="hibernate.jdbc.batch_size" value="50" /> 

    <entry key="hibernate.connection.CharSet" value="utf8" /> 
    <entry key="hibernate.connection.characterEncoding" value="utf8" /> 
    <entry key="hibernate.connection.useUnicode" value="true" /> 
</util:map> 

<tx:annotation-driven transaction-manager="transactionManager" /> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

當我列出哪裏是新玩家保存的結果,一切都罰款和保存,在表result_player保存IDS。但如果我然後把這個球員,改變,放在Resultplayers列表和托盤保存,然後我得到這個錯誤org.hibernate.PersistentObjectException分離的實體傳遞到persist:播放器

我讀了很多答案,但這個錯誤,但組合Spring和Maven與Hibernate annonations我不知道,我需要設置其他的東西或我需要調用一些方法(persist())?何時在存儲對象之前或之後調用pesist?

在此先感謝您的幫助....

回答

1

我認爲,你是第一個重要的理解上實體生命週期出頭。

enter image description here

在你第一種情況下

當我保存的結果與結果列表中的新球員,一切都很好,並保存

我認爲你正在創建一個新的對象然後你可以使用persist,在第二種情況下,當你看到異常,我認爲你的對象沒有管理,然後當你嘗試使用你會得到異常。嘗試使用合併intead堅持解決問題

+0

感謝您的照片。並回答。我認爲春天所做的一切,因爲我把註釋「cascade = CascadeType.ALL」,但顯然我必須邀請persist()方法。我必須閱讀文檔,因爲我從來沒有使用過這個。我希望能夠用所有已完成的註釋來彈出:)) – zexco2 2014-10-30 14:06:34

+0

這個例外說明你正試圖堅持一個分離的對象,這就是全部。春天無事可做 – Skizzo 2014-10-30 14:16:04

+0

我開始閱讀文檔。非常感謝您的建議,我希望能夠快速解決問題... – zexco2 2014-10-30 14:28:32