0

グラスフィッシュで実行されている春の mvc アプリケーションがあります。問題の原因がわからないので、できるだけ詳しく説明します。私は2つのクラス
Aユーザークラスを持っています

@Entity
@Table(name="Users")
public class User extends BaseEntity<User> {
    // other fields

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
    @OrderBy(value = "id DESC")
    private Set<OtherClass> objs;

    // getters and setters         
}

および OtherClass:

@Entity
@Table(name="OtherObjects")
public class OtheClass extends BaseEntity<OtheClass> {
    // other fields

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "User", nullable = false)
    private User user;

    // getters and setters
}

アプリケーションの起動時にユーザー オブジェクトを取得し、それをセッション オブジェクトに配置します。実行時に、ユーザーは DB に「OtherClass」オブジェクトを追加できます。otherClass オブジェクトは DB に正しく保存されます (Users テーブルの正しいユーザー行との関係で)。問題は、ユーザーが実行時に otherClass オブジェクトを追加した後、他のオブジェクトのセットが更新されないことです。奇妙なことは、DB からユーザー オブジェクトを再度取得しても、更新された OtherClass のセットを取得できないことです。これは私のpersistence.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
    version="2.0">
    <persistence-unit name="myPU" transaction-type="JTA">

        <jta-data-source>jdbc/MyDataSource</jta-data-source>

        <class>org.company.entities.OtherClass</class>
        <class>org.company.entities.User</class>

        <exclude-unlisted-classes />

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.current_session_context_class" value="thread" />
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>

    </persistence-unit>
</persistence>

最近、トランザクション マネージャーを春の jpa トランザクション マネージャーから JTA トランザクション マネージャーに変更しました。(私はそれがそれと関係があると思います)。何か案は?さらにコードや構成が必要な場合はお知らせください。更新を投稿します。

4

1 に答える 1

0

JPA は双方向の関連付けを自動的に維持しません。関係の両側を更新するのは開発者次第です。この場合、OtherClass オブジェクトの作成時に、それを User オブジェクトの objs コレクションに追加する必要があります。

于 2012-11-13T21:45:38.703 に答える