2013-06-29 68 views
4
@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 

}休眠:CascadeType.PERSIST不工作,但CascadeType.ALL保存對象

下面的程序無法正常工作 - >

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(); 

如果我在Section.java改變級聯選項。到CascadeType.ALL然後它工作。

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

我覺得PERSIST要救我的對象d =,但它拋出異常:

org.hibernate.TransientPropertyValueException:非空屬性引用瞬態值 - 瞬態實例必須當前操作之前被保存: Section.exchange - >交易所

回答

9

對於save()操作進行級聯,則需要啓用CascadeType.SAVE_UPDATE,使用專用的休眠Cascade註釋,因爲保存()是不是一個標準的JPA操作。或者您需要使用persist()方法,而不是save()方法。

+3

我已經失去了幾個小時的生活我永遠不會回來,因爲這個,所以謝謝!這並不明顯,記錄不完善。更多信息:https://forum.hibernate.org/viewtopic.php?t = 951275 – batwad

+1

這麼多小時我失去了...因爲...該ORM文檔... =( –

+0

如果更新父對象,我不希望孩子被更新,那麼如果我們使用SAVE_UPDATE,我們該如何實現這一點? – user3681970