我的问题很简单..Hibernate | Spring Data JPA | @OneToOne
- 比方说,有2类..在图书和作者
- 让我们假设一本书只能由1个作者写的。
- 作者可以写很多书。
- 让我们假设作者有独特的名字。 [没有2位作者可以有同名]
现在..假设所有的hibernate \ JPA配置都完成了。
从主要的方法 - 我救一个具有名称“BOOK1”和作者姓名“作者1”
书BOOK1如果我把级联所有..两本书和作者能够顺利通过省书保存。
问题
现在,如果我救另一个书同一作者 - 它节省了书,再创作。这意味着我结束了2个相同的作者。
我做了什么
- 我更换级联ALL用MERGE。
- 分配笔者前书 - 我检查DB的名字 -
一个。如果我得到回应 - 我将检索到的作者分配给书并保存该书。
b。如果我没有得到任何结果 - 我将作者分配到书中,并保存作者和书籍。
这样我就能解决我的问题。
但这是正确的方式吗?
@Entity
class Book{
@Id
private Long bookId;
private String name;
@OneToOne
private Author author;
}
@Entity
class Author{
@Id
private Long authorId;
private String name;
}
主代码
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(BeanConfiguration.class, args);
BookRepository bookRepo = context.getBean(BookRepository.class);
AuthorRepository authorRepo = context.getBean(AuthorRepository.class);
Book b1 = new Book();
b1.setBookName("book1");
Author a1 = new Author();
a1.setAuthorName("author1");
Author authorFromDatabase = authorRepo.findByAuthorName(a1.getAuthorName());
if (authorFromDatabase == null) {
b1.setAuthor(a1);
authorRepo.save(a1);
} else {
b1.setAuthor(authorFromDatabase);
}
bookRepo.save(b1);
}
更新 它不是那么简单。例如。请想想..客户和地址的对应关系..客户可以有一个或多个地址......如果新客户与其他客户共享地址,则不要使地址持续存在..只需将地址(id)分配给新客户。
我的问题是我上面做了什么,即搜索现有作者(或上述案例中的地址)是否正确? ..避免在作者(或地址表)重复的行
欢迎阅读堆栈溢出,请阅读[**我如何问一个好问题?**](http://stackoverflow.com/help/how-to-ask)特别是**“Write一个总结特定问题的标题“**部分。 –
添加将对象写入数据库的代码。我也怀疑这是你错过getter/setter和equals/hashCode实现的实际对象。 –
添加到主帖 – reverse