我在glassfish上运行了一个spring mvc应用程序。我不知道我的问题的根源是如此尽可能详细。我有2个班级 用户类
@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
}
和其他类:
@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对象之后,其他对象集不会更新。更奇怪的是,即使我再次从数据库中检索用户对象,我也没有得到更新的其他类集。 这是我的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>
我最近将我的事务管理器从spring的jpa事务管理器更改为JTA事务管理器。 (我想它与它有关)。有任何想法吗?如果需要进一步的代码或配置,请告诉我,我将发布更新。
答案 0 :(得分:0)
JPA不会自动维护双向关联,由开发人员更新关系的两端。在这种情况下,在创建OtherClass对象时,您应该将其添加到User对象中的objs集合。