如何不更新联合实体JPA

问题描述 投票:0回答:1

我将简要说明情况。我有2个实体,一个是所有者,并且具有FK,而另一个是加入的实体。情况是,所有者只能有一个孩子,而该孩子可以有多个所有者。但是,我认为我需要的是单向的OneToOne,因为我希望能够在所有者端执行所有CRUD操作,但是由于我正在执行的操作,我不希望任何子级被更新或删除。给所有者。如果这种推理是错误的,请纠正我。这就是我所拥有的:

@Entity
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @Column
    private fk_id;

// various fields with their getter and setters
    @OneToOne
    @JoinColumn(name = "fk_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Child childEntity;
}

@Entity
public class Child{
    @Id
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
}

我遇到的问题如下:-尝试使用有效的fk_id插入新的Parents调用save()错误之前,必须手动分配此类的ID我尝试解决此问题,但很快意识到这实际上不是问题。我遇到了这个问题,因为在创建新的父级JPA时,实际上是在尝试创建链接到该父级的子级,而它不能这样做,因为我没有ID的生成策略(这就是我想要的)。

经过各种尝试后,我觉得这是问题所在,我无法添加链接到现有子项的新父项,因为我尝试添加的每个父级JPA都会尝试添加相应的新子项。

我以为我可以通过单向的OneToOne关系来解决此问题,但是我做错了还是其他的事情做错了,因为单向的OneToOne需要我不需要的级联类型。

hibernate jpa hibernate-mapping one-to-one
1个回答
0
投票

(父亲->孩子)关系是ManyToOne

我不太清楚这个问题,如果子实体已经存在,您将必须获取BBDD的完整对象,以便它不是临时实体并将其建立为父属性。

此外,删除可插入的false和可更新的false,这是隐式的:

@JoinColumn (name = "fk_id", referencedColumnName = "id", insertable = false, updatable = false)

如果您想将其设置为true,则必须设置关系的类型,删除,更新的类型等等

@ManyToOne (cascade = {CascadeType.MERGE, CascadeType.PERSIST})

您可以在其中保留新父亲的那段代码吗?

© www.soinside.com 2019 - 2024. All rights reserved.