2013-06-24 105 views
0

我有我的數據庫中的兩個表之間的多對一關係用戶表&國家表。該模型類:休眠保存重複

@Entity (name = "user") 
public class User { 

     @Id @GeneratedValue (strategy = GenerationType.IDENTITY) 
     private int userId; 
     private String username; 
     private String password; 

     @ManyToOne (cascade = {CascadeType.ALL}) 
     @JoinColumn (name = "countryId") 
     private Country country; 

    //Getter & Setter 
} 


    @Entity (name = "country") 
    public class Country { 

     @Id @GeneratedValue(strategy = GenerationType.AUTO) 
     private int countryId; 
     private String countryName; 
     //Getter & Setter 
} 

我遇到的問題是,當我保存一個新的用戶對象還節省了一個新的國家紀錄,即使該國在數據庫中已經存在。我怎麼解決這個問題?

回答

3

您可以嘗試在@ManyToOne關係改變級聯型

@ManyToOne (cascade = CascadeType.MERGE) 
@JoinColumn (name = "countryId") 
private Country country; 

當使用CascadeType.ALL,它還包括,CascadeType.PERSIST,在這種情況下,堅持操作級聯到國家只要您堅持用戶

+0

這就產生了一個新問題。這不是現在保存對象 –

+0

@MarioDennis。你可以嘗試完全刪除級聯。 –

+0

當我刪除它時,我得到:org.hibernate.HibernateException:數據未保存:對象引用未保存的瞬態實例 - 在沖洗前保存瞬態實例:com.kyrogaming.models.Country –

0

據我所知Country表就像字典,在大多數情況下,你不應該保存它,每次你保存一個實體。爲什麼你需要通過級聯保存它?

如果您確實需要更新Country爲什麼在保存User實例之前無法完成?

使用CascadeType.ALL不太好,因爲當您刪除User時,您將丟失Country