Jpa 日食父母子女
我目前使用的两个类有一对一的关系。一个类包含目录(你可以把它看作是一本书);另一个类包含模板(您可以将其视为页面)。在这个场景中,一个模板只能属于一个目录,因此我使用了OneToMany关系 在我重新启动服务之前,我的应用程序运行得很好。它目前运行在Hana云平台的MaxDB下。我正在使用JPA和eclipselink(我使用@AdditionalCriteria来管理我的多租户,因为JPA提供的多租户不允许我对多个租户进行查询) 以下是我的目录代码摘录:Jpa 日食父母子女,jpa,eclipselink,one-to-many,entity-relationship,Jpa,Eclipselink,One To Many,Entity Relationship,我目前使用的两个类有一对一的关系。一个类包含目录(你可以把它看作是一本书);另一个类包含模板(您可以将其视为页面)。在这个场景中,一个模板只能属于一个目录,因此我使用了OneToMany关系 在我重新启动服务之前,我的应用程序运行得很好。它目前运行在Hana云平台的MaxDB下。我正在使用JPA和eclipselink(我使用@AdditionalCriteria来管理我的多租户,因为JPA提供的多租户不允许我对多个租户进行查询) 以下是我的目录代码摘录: @Entity @Table(name
@Entity
@Table(name = "Catalog")
@AdditionalCriteria("(:adminAccess = 1 or this.customerId=:customerId) AND (:allStatus = 1 or this.statusRecord = :statusRecord)")
public class Catalog implements Serializable {
private static final long serialVersionUID = -3906948030586841482L;
@Id
@GeneratedValue
private long id;
[...]
@OneToMany(cascade = ALL, orphanRemoval = false, fetch = EAGER, mappedBy = "catalog")
private Set<Template> templates = new HashSet<Template>();
[...]
public void setTemplate(Template template) {
this.templates.add(template);
}
}
在我的Servlet中,我只使用目录进行操作。如果我必须保存一个模板,我会从目录中读取它,在模板中进行修改并保存目录
在我重新启动服务之前,它工作得很好
目录不再具有对模板的任何引用,但模板仍然具有对其过去所属目录的引用
你能给我指一下正确的方向吗
谢谢您所说的“目录不再引用模板”是什么意思?集合
模板
为空吗?如果是,您如何知道“模板仍然有一个对它过去所属目录的引用?”?是的,集合模板在目录实体中为空,但在模板实体中我可以看到目录实体。我觉得这是因为实体工厂管理器的关闭(在销毁servlet时,我关闭了{}实体管理器和工厂管理器),这很有趣。。。当我删除@AdditionalCriteria时,一切都很好。
@Entity
@Table(name = "Template")
@AdditionalCriteria("(:adminAccess = 1 or this.customerId=:customerId) AND (:allStatus = 1 or this.statusRecord = :statusRecord)")
public class Template implements Serializable {
private static final long serialVersionUID = 5268250318899275624L;
@Id
@GeneratedValue
private long id;
[...]
@ManyToOne(cascade = ALL, fetch = EAGER)
@JoinColumn(name = "catalog_id", referencedColumnName = "id")
private Catalog catalog;
public void setCatalog(Catalog catalog) {
this.catalog = catalog;
if(!catalog.getTemplate().contains(this))
catalog.getTemplate().add(this);
}
}