【发布时间】:2018-11-14 02:07:57
【问题描述】:
假设我有一个应用程序来处理书籍集合。
我的应用程序允许向图书馆添加一本新书。创建书籍时,用户可以在列表中选择作者,如果作者不存在,他可以将他添加到列表中,将他的姓名提供给表单字段。 填写表格后,数据会发送到 WS,类似于
{
"name" : "The Book name"
"author" : {
"name" : "author's name"
}
}
然后我将 json 映射到我的实体中
书:
@Entity
@Table(name = "book")
public class Book{
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private Author author;
}
作者
@Entity
@Table(name = "author")
public class Author{
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "author", cascade = { CascadeType.ALL })
private List<Book> books;
}
如果用户尝试添加新作者,这将不起作用,当我尝试 .save() 时,我会收到一个错误:
org.hibernate.TransientPropertyValueException:对象引用了一个 未保存的瞬态实例
有没有办法用 Spring-Data-Jpa 处理这种情况,或者我是否必须手动检查我在 json 中是否有作者 ID,如果没有 - 意味着这是一个新作者 - 手动运行创建作者然后保存新书?
谢谢!
【问题讨论】:
-
没有理由保存
Author将不起作用。您是否尝试在其中设置未保存的Author来保存Book? -
如果我尝试单独保存作者,然后保存这本书,是的,它会起作用,但这不是我的问题 :) 实际上我希望能够调用 bookRepository.save(newBook)里面有一个新的未保存的作者,想知道我是否可以通过 JPA 来做到这一点,通过某种级联或其他方式?
标签: java hibernate jpa spring-data-jpa