@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
source share