グラスフィッシュで実行されている春の 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 トランザクション マネージャーに変更しました。(私はそれがそれと関係があると思います)。何か案は?さらにコードや構成が必要な場合はお知らせください。更新を投稿します。