Java 如何保存具有现有子对象的对象?

Java 如何保存具有现有子对象的对象?,java,hibernate,spring-boot,spring-data-jpa,Java,Hibernate,Spring Boot,Spring Data Jpa,我有两门课“ClassA”有一个“ClassB”列表。当我准备好时,我将保存我想要保存的'ClassA',以及一个已经由另一个系统保存的现有ClassB的列表 我尝试了一些级联选项,结果是一样的。如果我放置cascade类型,那么hibernate会尝试插入ClassB的对象,而这不是预期的行为 我使用的是Spring数据JPA,我的类配置如下: @Table(name = "ClassA", schema = "SCHEMA1") public void ClassA { @ManyToM

我有两门课“ClassA”有一个“ClassB”列表。当我准备好时,我将保存我想要保存的'ClassA',以及一个已经由另一个系统保存的现有ClassB的列表

我尝试了一些级联选项,结果是一样的。如果我放置cascade类型,那么hibernate会尝试插入ClassB的对象,而这不是预期的行为

我使用的是Spring数据JPA,我的类配置如下:

@Table(name = "ClassA", schema = "SCHEMA1")
public void ClassA {


@ManyToMany
@JoinTable(name = "CLASSA_CLASSB", schema="SCHEMA1" joinColumns = @JoinColumn(name = "SEQ_CLASSA"), inverseJoinColumns = @JoinColumn(name = "SEQ_CLASSB"))
list<ClassB> chilsAlreadySaved;
.
.
.
}

@Table(name="ClassB", schema = "SCHEMA2")
public void ClassB {
//HAS NO MAPPING FOR ClassA
.
.
.
}

在hibernate尝试在@JoinTable注释上映射的关系表(“CLASSA_CLASSB”)上插入数据后,会发生此错误

insert 
    into
        schema1.classA
        (attibutes ...) 
    values
        (?, ?, ?, ?, ? ...)
Hibernate: 
    insert 
    into
        schema1.CLASSA_CLASSB
        (seq_classA, seq_classB) 
    values
        (?, ?)


org.springframework.dao.InvalidDataAccessApiUsageException: 
org.hibernate.TransientObjectException: object references an unsaved transient 
instance - save the transient instance before flushing: ClassB; nested exception is java.lang.IllegalStateException: 
org.hibernate.TransientObjectException: object references an unsaved transient 
instance - save the transient instance before flushing: ClassB

.
.
.


因此,目标是持久化“ClassA”类型的对象,而不对“ClassB”类型的对象进行更改。唯一允许的更改是对“ClassA”对象表的插入和对关系表的插入(“ClassA_CLASSB”)

JPA上的persiste方法和there规范将更新db中存在的对象,因此,当您将持久化classB时,classA的对象将被更新,如果没有更改,它们将保持不变

如何检索ClassB的对象?我从rest API收到一个ClassA的JSON,其中包含一个ClassB列表。我不想保存“ObjectB”的新实例,我想保存一个“ObjectA”的新实例和一个现有的“ObjectB”列表。
insert 
    into
        schema1.classA
        (attibutes ...) 
    values
        (?, ?, ?, ?, ? ...)
Hibernate: 
    insert 
    into
        schema1.CLASSA_CLASSB
        (seq_classA, seq_classB) 
    values
        (?, ?)


org.springframework.dao.InvalidDataAccessApiUsageException: 
org.hibernate.TransientObjectException: object references an unsaved transient 
instance - save the transient instance before flushing: ClassB; nested exception is java.lang.IllegalStateException: 
org.hibernate.TransientObjectException: object references an unsaved transient 
instance - save the transient instance before flushing: ClassB

.
.
.