gpt4 book ai didi

java - org.hibernate.PersistentObjectException 与 Spring、Maven 和 Hibernate 的组合

转载 作者:行者123 更新时间:2023-12-01 12:21:04 25 4
gpt4 key购买 nike

我是新来的,我希望我能找到解决我的问题的方法。我有一个异常(exception) org.hibernate.PersistentObjectException ,它以多对多关系保存数据。我使用 Spring 框架和 Maven。

这是我对 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;

application-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 中。但是,如果我随后获取该player,进行更改,放入 Resultplayers List 和托盘中进行保存,那么我会收到此错误 org.hibernate.PersistentObjectException detachedEntitypassedtopers:Player

我读了很多关于这个错误的答案,但是结合 Spring 和 Maven 与 Hibernate 注释,我不知道,我是否需要设置其他东西,或者我需要调用一些方法(persist())?什么时候调用pesist?在存储对象之前还是之后?

预先感谢您的帮助......

最佳答案

我认为对您来说,首先重要的是了解实体生命周期的一些内容。

enter image description here

在你的第一种情况

When I saved Result with List where is new Players, everything is fine and save

我认为您正在创建一个新对象,然后您可以使用 persist,在第二种情况下,当您遇到异常时,我认为您的对象尚未管理,然后当您尝试使用时,您会得到异常(exception)。尝试使用 merge 而不是 persist 来解决问题

关于java - org.hibernate.PersistentObjectException 与 Spring、Maven 和 Hibernate 的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com