如何摆脱;org.hibernate.transientObject异常“;?

如何摆脱;org.hibernate.transientObject异常“;?,hibernate,jakarta-ee,jpa,Hibernate,Jakarta Ee,Jpa,我在执行以下场景时遇到了上述异常 学生和地址具有多对一关系,其中as学生和电话号码具有一对多关系。在EntityManager对象上调用persist方法以保存“Students”对象时,我遇到如下异常: org.hibernate.transientObject异常:对象引用未保存的 瞬态实例-刷新前保存瞬态实例: model.Students1.addressId->model.Address 可以采取哪些步骤来解决这个问题 详情如下: DAO类: 您应该定义级联。 级联意味着,如果对象“A

我在执行以下场景时遇到了上述异常

学生
地址
具有
多对一
关系,其中as
学生
电话号码
具有
一对多
关系。在EntityManager对象上调用persist方法以保存“Students”对象时,我遇到如下异常:

org.hibernate.transientObject异常:对象引用未保存的 瞬态实例-刷新前保存瞬态实例: model.Students1.addressId->model.Address

可以采取哪些步骤来解决这个问题

详情如下:

DAO类:
您应该定义级联。 级联意味着,如果对象“A”具有对象“B”(或这些对象的集合),则引用的“B”对象将按照级联定义的指示进行保存/更新

    public class DAO {

    public static void main(String[] arr){

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("OneToManyPU");

    EntityManager em = emf.createEntityManager();

    EntityTransaction tr= em.getTransaction();

    try{
        tr.begin();

        PhoneNumbers p1 = new PhoneNumbers();
        PhoneNumbers p2 = new PhoneNumbers();

        p1.setPhoneType("mobile");
        p1.setPhoneNo("9881592106");

        p2.setPhoneType("landline");
        p2.setPhoneNo("24214988");

        Set<PhoneNumbers> phones = new HashSet<PhoneNumbers>();
        phones.add(p1);
        phones.add(p2);

        em.persist(p1);
        em.persist(p2);

        Address a1 = new Address();
        a1.setCity("Pune");
        a1.setZip("400987");
        Students1 s1 = new Students1();
        s1.setName("Alka");
        s1.setAddressId(a1);
        s1.setPhoneNo(phones);

        em.persist(s1);
         tr.commit();
   }
    catch(Exception e){
       e.printStackTrace();
    }
    finally{
         emf.close();
    }
}
    }  
    @Entity    
@Table(name = "STUDENTS")    
public class Students1 implements Serializable {    
    private static final long serialVersionUID = 1L;     
    @Id    
    @GeneratedValue(strategy = GenerationType.AUTO)     
    @Column(name = "ID")    
    private Long id;    

    @Column(name = "NAME")    
    private String name;    

    @JoinColumn(name = "ADDRESS_ID", referencedColumnName = "ID")    
    @ManyToOne    
    private Address addressId;  

    @OneToMany(cascade ={CascadeType.MERGE,CascadeType.PERSIST})
   @JoinTable(name="STUDENT_PHONE",joinColumns={@JoinColumn(name="STUDENTS.ID")},inverseJoinColumns={@JoinColumn(name="PHONENUMBERS.ID")})
    private Set<PhoneNumbers> phoneNo = new HashSet<PhoneNumbers>();  

       public void setPhoneNo(Set<PhoneNumbers> phoneNo) {  
        this.phoneNo = phoneNo;
    }

    public Set<PhoneNumbers> getPhoneNo() {
        return phoneNo;
    }

    public Students1() {
    }

    public Students1(Long id) {
        this.id = id;
    }
    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 Address getAddressId() {
        return addressId;
    }

    public void setAddressId(Address addressId) {
        this.addressId = addressId;
    }
@Entity  
@Table(name = "ADDRESS")  
public class Address implements Serializable {  
    private static final long serialVersionUID = 1L;  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    @Column(name = "ID")  
    private Long id;  
    @Column(name = "CITY")  
    private String city;  
    @Column(name = "ZIP")  
    private String zip;  
    @OneToMany(mappedBy = "addressId")  
    private Collection<Students1> students1Collection;  

    public Address() {
    }

    public Address(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

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

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public Collection<Students1> getStudents1Collection() {
        return students1Collection;
    }

    public void setStudents1Collection(Collection<Students1> students1Collection) {
        this.students1Collection = students1Collection;
    }  
}
    @Entity 
    public class PhoneNumbers implements Serializable {    
    private static final long serialVersionUID = 1L;    
    @Id     
    @GeneratedValue(strategy = GenerationType.AUTO)    
    private Long id;    

    @Column(name="PhoneNo")  
    private String phoneNo;

    @Column(name="PhoneType")  
    private String phoneType;

    public String getPhoneNo() {  
        return phoneNo;
    }

    public void setPhoneNo(String phoneNo) {  
        this.phoneNo = phoneNo;
    }

    public String getPhoneType() {
        return phoneType;
    }

    public void setPhoneType(String phoneType) {
        this.phoneType = phoneType;
    }

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