Hibernate: CascadeType.PERSIST does not work, but CascadeType.ALL to save the object

@Entity @Table(name = "Section_INST") public class Section { @javax.persistence.Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "Section_ID_GENERATOR") @SequenceGenerator(name = "Section_ID_GENERATOR",sequenceName = "Section_ID_SEQUENCER" , initialValue = 1 , allocationSize = 1) @Column(name = "Section_ID") private int Id; @Column(name = "Section_Name") private String name; @OneToOne(optional = false,cascade = CascadeType.PERSIST) @JoinColumn(name = "Exch_ID") private Exchange exchange; //---Constructor and Getter Setters----- } @Entity @Table(name = "EXCHANGE_INST") public class Exchange { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "Exchange_ID_GENERATOR") @SequenceGenerator(name = "Exchange_ID_GENERATOR",sequenceName = "Exchange_ID_SEQUENCER" , initialValue = 1 , allocationSize = 1) @Column(name = "Exchange_ID") private int Id; @Column(name = "Exchange_name") private String name; @OneToOne(mappedBy ="exchange") private Section section; //-----------Getter and Setter...And Constructor 

}

The following program does not work →

  final SessionFactory sessionFactory = configuration.buildSessionFactory(); final Session session = sessionFactory.openSession(); session.beginTransaction(); final Exchange exchange = new Exchange("MyExchange"); final Section section = new Section("MySection" , exchange); exchange.setSection(section); session.save(section); session.getTransaction().commit(); session.close(); 

If I change the cascade parameters in Section.java to CascadeType.ALL, then it works.

 @OneToOne(optional = false,cascade = CascadeType.PERSIST) --- > CascadeType.ALL @JoinColumn(name = "Exch_ID") private Exchange exchange; 

I think PERSIST should save my d = object, but it throws an exception:

org.hibernate.TransientPropertyValueException: the null-null property refers to a transition value - the transition instance must be saved before the current operation: Section.exchange -> Exchange

+4
source share
1 answer

For the save() operation to be cascaded, you need to enable CascadeType.SAVE_UPDATE using the proprietary Hibernate Cascade , since save () is not a standard JPA operation. Or you need to use the persist() method, not the save() method.

+9
source

Source: https://habr.com/ru/post/1488828/


All Articles