2012-05-12 102 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