我正在学习SpringJPA,我从将对象映射到表开始。我对OneToOne和OneToMany的关系没有问题,但我不太明白为什么我不能预先列出一个与许多关系相关的对象。我有一本可以有很多作者的书,还有一本可以有很多书的作者。通过中间表book_author正确生成模式(我可以在MySql Workbench中看到),但我得到以下示例:
Hibernate:在作者(名字、姓氏)中插入值(?,)
Hibernate:插入到书(种类,标题)值 (?, ?)
Hibernate:插入到书(种类,标题)值 (?, ?)
Hibernate:在author\u book(author\u id,book\u id)中插入值(?,)
Hibernate:在author\u book(author\u id,book\u id)中插入值(?,)
Hibernate:在作者(名字、姓氏)中插入值(?,)
线程“main”组织中出现异常。springframework。刀。InvalidDataAccessApiUsageException:传递给persist:com的分离实体。实例演示。模型。书嵌套的异常是org。冬眠PersistentObjectException:传递给persist:com的分离实体。实例演示。模型。书
我还粘贴了Hibernate操作,效果很好。
这些是我的实体定义:
@Table(name = "author")
public class Author {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.ALL})
@JoinTable(
name = "author_book",
joinColumns = {@JoinColumn(name = "author_id")},
inverseJoinColumns = {@JoinColumn(name = "book_id")}
)
private List<Book> books = new ArrayList<Book>();
//getters and setters omitted for brevity
}
@Entity(name = "Book")
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String title;
private String kind;
@ManyToMany(mappedBy = "books")
private List<Author> authors = new ArrayList<Author>();
//getters and setters omitted for brevity
}
这些是我的存储库:
@Repository
public interface AuthorRepository extends CrudRepository<Author, Long> {
}
@Repository
public interface BookRepository extends CrudRepository<Book, Long> {
}
最后,这是我的主要任务
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
AuthorRepository authorRepository = ctx.getBean(AuthorRepository.class);
BookRepository bookRepository = ctx.getBean(BookRepository.class);
Author author = new Author();
author.setFirstName("Author");
author.setLastName("First");
Author author2 = new Author();
author.setFirstName("Author");
author.setLastName("Second");
Book book1 = new Book();
book1.setTitle("Book 1");
book1.setKind("History");
book1.getAuthors().add(author);
book1.getAuthors().add(author2);
Book book2 = new Book();
book2.setTitle("Book 2");
book2.setKind("Science");
book2.getAuthors().add(author);
author.getBooks().add(book1);
author.getBooks().add(book2);
author2.getBooks().add(book1);
authorRepository.save(author);
authorRepository.save(author2);
System.out.println("-->End of db operation");
}
Hibernate为对象维护3种状态:
在您的情况下,authorRepository保存临时对象(author、book1和book2),并在保存后关闭会话。因此,在第一次调用save方法后,所有对象(author、book1和book2)都处于分离状态,这就是当您尝试保存author2时,Hibernate抛出分离实体异常的原因。您可以在本视频中找到更多信息https://www.youtube.com/watch?v=sjZGFHEdD4M
在Author
类中创建一个新方法来添加书籍
,而不是使用Author。getBooks()。添加(第1册)
public void addBook(Book book) {
books.add(book);
books.authors.add(this);
}
而且您不应该使用CascadeType。全部
,因为删除实体时,关系的另一端也会被删除
p3=Place(name='Demon Dogs',address='944 W.Fullerton')restaurant.objects.create(Place=p3,serves_hot_dogs=true,serves_pizza=false) Traceback(最近调用为last): ... valueerror:save()禁止,以防止由于未保存的相关对象'Place'而丢失数据
当我创建新的团队并试图将其关联到我的用户配置文件时,我发现这个错误正在显示。我想要一个团队,很多成员和只有一个创建者(或管理的团队),创建者也是小组的成员。如何将团队与用户配置文件关联? models.py views.py
我有一个数据库(和模型)情况,如下模式所示: 这是ModelSerialize: 我将这个json发送到api方法 视图中我的post_create实现: 更新 现在我得到了这个错误:django.db.models.fields.related_descriptors.relatedObjectDoesNotexist:Post没有ID。 这些是我的模型: 类PostCategory(Model
背景:对于我的用户,我需要存储一对相同的对象类型(设置),目前我有它像 我正在创建带有设置的KeyValueTypes,并将其添加到列表中(每个用户都有一个列表)。我的设置有一个值字段(它显示了它们是否比其他设置“更重要”),所以我希望基于该字段添加它们,稍后我还需要基于该字段(可能还需要基于名称字段)进行搜索--所以搜索将不得不在列表中查找,然后在KeyValueTypes中查找 问题:什么是最
之前在文章中说到,Jsoup使用了一套自己的DOM对象体系,和Java XML API互不兼容。这样做的好处是从XML的API里解脱出来,使得代码精炼了很多。这篇文章会说明Jsoup的DOM结构,DOM的遍历方式。在下一篇文章,我会并结合这两个基础,分析一下Jsoup的HTML输出功能。 DOM结构相关类 我们先来看看nodes包的类图: 这里可以看到,核心无疑是Node类。 Node类是一个抽象
正如官方文件所说: 有时,您可能不仅希望保存模型,还希望保存其所有关系。为此,您可以使用push方法:保存模型和关系$user- 术语表: term_id 姓名 鼻涕虫 Term_taxonomy表: term_taxonomy_id term_id 描述 我的学期模型: 我的术语分类模型: 我的分类控制器 用我上面的代码,我可以保存名称和段塞,但分类和描述没有插入。有可能吗? 谢谢,我是新来的。