Java JPA、Spring和ObjectDB未更新

Java JPA、Spring和ObjectDB未更新,java,spring,jpa,many-to-one,objectdb,Java,Spring,Jpa,Many To One,Objectdb,我是SpringJPA与ObjectDB数据库合作的新手,但我遇到了一个无法解决的问题 我有一个使用上述技术编写的应用程序,它工作正常,可以保存新的实体等(因此我认为配置bean没有问题),除了更新最简单的OneToMany/manytone关系。这些更新没有持久化到数据库中,我不知道为什么。下面是我的代码片段: 实体团队(1:N): 以下是控制器中使用DAO对象和问题的代码段: public ModelAndView addPlayer(HttpServletRequest request,

我是SpringJPA与ObjectDB数据库合作的新手,但我遇到了一个无法解决的问题

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

实体团队(1:N):

以下是控制器中使用DAO对象和问题的代码段:

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
页面中列出球队中的所有球员,或者尝试以相同的方式添加另一名球员时,球队总是空的——数据库中没有保存任何内容。既不是团队对象,也不是球员对象。我做错了什么

任何帮助都将不胜感激。谢谢

EDIT:这是我的持久性。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>

CascadeType.PERSIST
级联一个新对象的persistens,但您从数据库加载一个玩家,并将该玩家附加到您的团队中。如果要级联,则必须添加
CascadeType.MERGE

cascade = {CascadeType.PERSIST, CascadeType.MERGE}

您可以查看
CascadeType.ALL
CascadeType.PERSIST
级联新对象的持久化,但您可以从数据库加载一个玩家,并将该玩家附加到您的团队。如果要级联,则必须添加
CascadeType.MERGE

cascade = {CascadeType.PERSIST, CascadeType.MERGE}

您可以查看一下
CascadeType.ALL

如果没有彻底阅读您的代码,这可能是原因:
cascade=CascadeType.PERSIST
-您只是级联持续。如果没有彻底阅读您的代码,这可能是原因:
cascade=CascadeType.PERSIST
-您只是级联持续。您是对的,我应该用级联型的。我刚刚改变了,但什么也没发生。此外,我发现还有一些全局性问题,因为根本无法对持久化实体进行任何更改。即使是最简单的t.setName(“新名称”)也不起作用。它会更改页面上对象内的名称,但不会将其保留到数据库中。我知道在没有完整代码的情况下给出建议是很困难的,但是如果有人知道可能是什么原因,我可以提供任何信息,任何代码,我只需要整理一下。谢谢,我已把它附在上面的问题后面了。感谢您用
@Transactional
注释您的
addPlayer
控制器操作。是!!!这就成功了。我以为会是这么简单的事情:-)。我在dao的persist()方法上有@Transactional注释,甚至试图将其放在整个dao类上,但没有放在控制器中的方法上。。。非常感谢,你帮我节省了几个小时的时间。你说得对,我应该用CascadeType.ALL。我刚刚改变了,但什么也没发生。此外,我发现还有一些全局性问题,因为根本无法对持久化实体进行任何更改。即使是最简单的t.setName(“新名称”)也不起作用。它会更改页面上对象内的名称,但不会将其保留到数据库中。我知道在没有完整代码的情况下给出建议是很困难的,但是如果有人知道可能是什么原因,我可以提供任何信息,任何代码,我只需要整理一下。谢谢,我已把它附在上面的问题后面了。感谢您用
@Transactional
注释您的
addPlayer
控制器操作。是!!!这就成功了。我以为会是这么简单的事情:-)。我在dao的persist()方法上有@Transactional注释,甚至试图将其放在整个dao类上,但没有放在控制器中的方法上。。。非常感谢,你节省了我几个小时的时间。
<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" />
cascade = {CascadeType.PERSIST, CascadeType.MERGE}