2013-10-28 57 views
1

我有兩個表和對象:StudentsInGroup和GroupRegistration。當映射是@ManyToOne時,對象引用未保存的瞬態實例

class StudentInGroup { 
@Id 
@Column (name = "ID") 
private Integer id; 

// other fields 

@ManyToOne(fetch = FetchType.EAGER, targetEntity = GroupRegistration.class) 
@JoinColumn(name = "GROUP_CODE") 
private GroupRegistration groups; 

// other methods 
} 


class GroupRegistration { 
@Id 
@Column (name = "ID") 
private Integer Id; 

// other fields 

@Column(name = "GROUP_CODE") 
private Integer groupCode; // this is not primary key 

// other methods 
} 

我有形式和方法insertStudentInGroup(StudentInGroup student);但是當我調用這個方法時,我得到了異常:對象引用一個未保存的瞬態實例 - 保存沖洗前的瞬態實例:StudentInGroup.groups - > GroupRegistration

我看到人們有這種問題,但他們使用級聯,我不不需要級聯。有誰能夠幫助我。

+0

您的命名非常混亂:爲什麼將字段命名爲「groups」,因爲它只包含一個組註冊?它應該被命名爲「組」或「組註冊」。爲什麼在StudentInGroup中命名GROUP_CODE列,因爲它沒有引用GroupRegistration的GROUP_CODE列,但ID列?它應該被命名爲GROUP_ID。 –

+0

@JBnizet列名GROUP_CODE是真的,因爲它引用GroupRegistration的GROUP_CODE列,它不是ID,它是組代碼 – Chala

+0

不,它不引用GROUP_CODE。只有當您向JoinColumn註釋添加'referencedColumnName =「GROUP_CODE」'時纔會這樣。否則,它會引用目標實體的ID。 –

回答

2

如果不使用級聯,那麼你需要保存GroupRegistration(非持有端)您節省StudentInGroup(擁有方)首先之前,否則將無法知道該怎麼做映射爲你,因此顯示TransientObjectException。希望它能幫助你。

+0

GroupRegistration已保存。我已經保存了GroupRegistrations,現在我想註冊學生註冊組(GroupRegistration) – Chala

+0

您能提供代碼片段嗎?謝謝。 –

+0

我解決了這個問題:)我的同事 – Chala

0

這可以節省您的時間:

如果GroupRegistration已經存在,同時節省StudentInGroup你需要確保GroupRegistration屬性正確設置爲空或需要檢查它是否持有正確的ID (主鍵)值。

Employee emp = new Employee();//or from UI modal. 
emp.setDept((emp.getDept().getDeptId != null) ? new Dept(emp.getDept().getDeptId) : null); 
//When getting from UI, we need to explicitly set the property to null to make hibernate happy.:-) 
em.persist(emp); 
相關問題