Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 日食父母子女_Jpa_Eclipselink_One To Many_Entity Relationship - Fatal编程技术网

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

我目前使用的两个类有一对一的关系。一个类包含目录(你可以把它看作是一本书);另一个类包含模板(您可以将其视为页面)。在这个场景中,一个模板只能属于一个目录,因此我使用了OneToMany关系

在我重新启动服务之前,我的应用程序运行得很好。它目前运行在Hana云平台的MaxDB下。我正在使用JPA和eclipselink(我使用@AdditionalCriteria来管理我的多租户,因为JPA提供的多租户不允许我对多个租户进行查询)

以下是我的目录代码摘录:

@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);
    }
}