1

ObjectDB データベースと連携する Spring JPA の初心者ですが、解決できない問題に遭遇しました。

私は言及された技術で書かれたアプリケーションを持っていますが、それは問題なく動作し、新しいエンティティなどを永続化します (したがって、構成 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 オブジェクトと問題の両方を使用したコントローラーのスニペットです。

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>

PS 絶対パス"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" />
4

1 に答える 1

1

CascadeType.PERSIST新しいオブジェクトの持続性をカスケードしますが、データベースからプレーヤーをロードし、プレーヤーをチームにアタッチします。カスケードしたい場合は、追加する必要がありますCascadeType.MERGE

cascade = {CascadeType.PERSIST, CascadeType.MERGE}

をご覧になる場合がありますCascadeType.ALL

于 2011-10-13T07:57:59.103 に答える