gpt4 book ai didi

java - JPA、Spring 和 ObjectDB 未更新

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:53 26 4
gpt4 key购买 nike

我对 Spring JPA 与 ObjectDB 数据库配合是一个新手,但我遇到了一个无法解决的问题。

我有一个使用上述技术编写的应用程序,它工作正常,它保留新实体等(因此我认为配置 bean 没有问题),除了更新最简单的 OneToMany/ManyToOne 关系。这些更新不会持久保存到数据库中,我不明白为什么。这是我的代码片段:

实体团队(1:N):

@Entity
public class Team implements Serializable {
...
List<Player> squad;
...
@OneToMany(mappedBy="team", cascade=CascadeType.PERSIST)
public List<Player> getSquad() {
return squad;
}
...
}

实体玩家(N:1)

@Entity
public class Player implements Serializable {
...
private Team team;
...
@ManyToOne
public Team getTeam() {
return team;
}
...
}

这是使用 DAO 对象和问题的 Controller 的片段:

public ModelAndView addPlayer(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
Team t = teamDao.getTeamById(1); // retrieves an object with ID=1
Player p = playerDao.getPlayerById(1); // retrieves a player with ID=1
t.getSquad().add(p); // adds a player to the squad -> working fine but does not persist
System.out.println("Size of squad: " + t.getSquad().size()); // the player is there
...
return new ModelAndView("index.jsp", "team", t);
}

当我尝试在 index.jsp 页面中列出球队中的所有球员或尝试以相同方式添加其他球员时,球队始终为空 - 数据库中没有任何内容。既不是球队对象,也不是球员对象。我做错了什么?

如有任何帮助,我们将不胜感激。谢谢。

编辑:这是我的 persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="NewPU" transaction-type="RESOURCE_LOCAL">
<provider>com.objectdb.jpa.Provider</provider>
<properties>
<property name="javax.persistence.jdbc.url" value="C:/file.odb" />
<property name="javax.persistence.jdbc.user" value="admin"/>
<property name="javax.persistence.jdbc.password" value="admin"/>
</properties>
</persistence-unit>

附注绝对路径“C:/file.odb”仅用于演示目的。

这是 Spring 配置:

<mvc:annotation-driven />

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="NewPU" />
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

最佳答案

CascadeType.PERSIST 级联新对象的持久性,但您从数据库加载玩家并将该玩家附加到您的团队。如果你想级联,你必须添加CascadeType.MERGE

cascade = {CascadeType.PERSIST, CascadeType.MERGE}

您可以查看CascadeType.ALL

关于java - JPA、Spring 和 ObjectDB 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750898/

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