2012-05-12 108 views
0

我有2個班休眠@OneToMany FK未設置

@Entity 
@Table(name = "user") 
public class User 
@Id 
@Column(name = "id") 
@GeneratedValue 
private int id; 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "user") 
@Cascade({CascadeType.ALL}) 
private Collection<Book> userBooks; 
} 
@Entity 
@Table(name = "books") 
public class Book 
@Id 
@Column(name = "id") 
@GeneratedValue 
private int id; 

@ManyToOne 
private User user; 
} 

這裏更多的代碼:

User user = new User(); 
    user.setUserName("Gleeb"); 
    user.setUserPassword("gleeb"); 
Book book = new Book(); 
    book.setTitle("some book "); 
    book.setbookType(1); 
    user.addUserbook(book); 

    userService.save(user); 

我試圖創建一個新用戶,並添加一本新書。 當我保存用戶

session.saveOrUpdate(用戶);

用戶保存,這本書被保存 而書中表,user_ID的未設置。並留空。

這是爲什麼。

謝謝。

回答

1

您沒有顯示您的代碼,但連接表可能未填充,因爲您忘記初始化本書的用戶字段。在雙向關聯中,所有者方是沒有mappedBy屬性的那一面,JPA用這個方面知道id是否存在關聯。

+0

我已添加更多代碼。 如果我嘗試初始化書籍類中的用戶記憶,我得到異常: 對象引用未保存的瞬態實例 - 在沖洗前保存瞬態實例 – Gleeb

+0

好吧,我不瞭解你的速記,但最終你是對的。我不得不把我創建的新用戶放入書實例中。這是它知道用戶ID的唯一方式。 – Gleeb