当前位置: 首页 > 知识库问答 >
问题:

组织。冬眠TransientObjectException:对象引用未保存的临时实例

钱繁
2023-03-14

我试图在名为Person和Address的两个实体之间建立单向关系,同时保存Person(包含地址集合)获取组织。冬眠TransientObjectException:对象引用未保存的临时实例

当我更改cascadeType=all时,子对象正在传播。但这里的问题是cascadeType=all Hibernate在删除所属实体时也会尝试删除子实体。我不希望发生这种情况,因为在很多关系中,子实体可能被其他实体引用。理想情况下,cascadeType=persist应该完成这项工作,但不幸的是,这给了我提到的例外。

有人能帮我解决如何用cascadeType=持久保存子对象(地址)。我只是想知道为什么cascadeType=坚持不做坚持的任务。

public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private String name;



    @LazyCollection(LazyCollectionOption.FALSE)

    @ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
    private Collection<Address> address=new HashSet<Address>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Collection<Address> getAddress() {
        return address;
    }

    public void setAddress(Collection<Address> address) {
        this.address = address;
    }


}

   @Entity(name="Address")
public class Address {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;
    @Column(name="country")
    private String country;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }

}

共有1个答案

王昊
2023-03-14

在许多关系的情况下,您总是必须使用JOIN Table(这是第三个表)。在这种情况下,即使使用CASCADE-ALL,在删除Owning实体时也不会出现子实体被删除的问题。

请看下面的帖子:

在JPA/Hibernate中建模多对多关系

 类似资料: