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 ORM行为?_Jpa_Orm_Mapping_Entity - Fatal编程技术网

具有不同级联类型参数的两个实体的JPA ORM行为?

具有不同级联类型参数的两个实体的JPA ORM行为?,jpa,orm,mapping,entity,Jpa,Orm,Mapping,Entity,我有一个关于JPA或两个持久实体之间的映射的问题,在它们的注释上有一个不同的CascadeType参数 为了澄清问题,这里有一个简单的例子: @Entity public class Article { @Id @GeneratedValue private Long id; @ManyToOne( cascade = CascadeType.ALL ) private Author author; // Getters and Set

我有一个关于JPA或两个持久实体之间的映射的问题,在它们的注释上有一个不同的CascadeType参数

为了澄清问题,这里有一个简单的例子:

@Entity
public class Article
{
    @Id
    @GeneratedValue
    private Long    id;

    @ManyToOne( cascade = CascadeType.ALL )
    private Author  author;

    // Getters and Setters follow here
}
_

@实体
公共类作者
{
@身份证
@生成值
私人长id;
@OneToMany(mappedBy=“author”,cascade=CascadeType.REFRESH,
(删除=真)
私人列表<文章>文章;
//接球手和接球手都在这里
}
如您所见,“author”属性具有不同的级联类型集 (CascadeType.REFRESH)然后是“articles”属性(CascadeType.ALL)。起初,我认为不允许为同一属性映射使用不同的级联类型,但我尝试了,并且是允许的

现在,我想知道的是,这是如何表现的?这样一个(人为的)例子有什么意义吗(如你所见,这更像是一个理论问题)


非常感谢你的帮助

cascade=CascadeType.XXX
表示:当您对该对象执行XXX操作时,自动对关联引用的对象执行相同的XXX操作

因此,在您的情况下,如果您持久化/合并/删除一篇文章,它也将持久化/合并/删除其作者。因此,这是非常值得怀疑的。我不认为你真的想要那样

当你刷新作者时,它也会刷新文章


请注意,如果您刷新一篇文章,它将刷新其作者(因为CascadeType.ALL),并且由于作者与文章的关联表单也具有刷新cascade类型,因此它还将刷新作者的所有文章。

非常感谢您的帮助。由于数据库的限制,如果作者被另一篇文章引用,删除一篇文章会抛出错误,对吗?(作者不能被删除)。在两侧都有级联的情况下,这会导致无限的刷新/删除/持久化循环吗?是的,它会抛出一个错误。但这显然是一个信号,表明级联所有的一切都没有意义。它不会导致无限循环,因为Hibernate足够聪明,知道级联已经应用于实体。我了解到一直使用CascadeType.不是一个好主意(但是当我省略DELETE操作时,它们可能会在数据库中留下孤立项)。还有一个问题(希望如此):刷新这里的确切含义是什么?我可以想象什么是PERSIST、DELETE等,但在Java中必须做什么才能产生刷新操作?请参阅
@Entity
public class Author
{
    @Id
    @GeneratedValue
    private Long            id;

    @OneToMany( mappedBy = "author", cascade = CascadeType.REFRESH, 
        orphanRemoval = true )
    private List< Article > articles;

    // Getters and Setters follow here
}