Java JPA/Hibernate-不使用persist()保存子级
据我所知,persist(object)方法-每当我们将新对象保存到数据库中时,都应该使用它(使其成为持久对象)Java JPA/Hibernate-不使用persist()保存子级,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,据我所知,persist(object)方法-每当我们将新对象保存到数据库中时,都应该使用它(使其成为持久对象) 在我的例子中,我有一本@OneToMany关系中的书类(家长)和一个评论类(孩子)-一本书有很多评论 以下是课程: @Entity @Table(name = "book") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name =
在我的例子中,我有一本@OneToMany关系中的书类(家长)和一个评论类(孩子)-一本书有很多评论 以下是课程:
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "title")
private String title;
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE,
CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name = "author_id")
private Author author;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "book_id", referencedColumnName = "id")
private List<Review> reviews;
//skipping setters and getters
public void addReview(Review review) {
if(reviews == null) {
reviews = new ArrayList<Review>();
}
reviews.add(review);
}
}
@Entity
@Table(name = "review")
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "comment")
private String comment;
//skipping setters and getters
}
有人能解释一下吗?您认为级联是什么意思。所有的在定义关系时都没有,顺便说一句,如果您使用的是Spring,我真的不希望您使用这段代码。谢谢,Cascade.ALL包括Cascade.PERSIST,它对相关实体执行PERSIST()操作。我还没有使用Spring,但正在准备学习它。我认为您混淆了概念,当调用addReview方法时,您正在将一个对象添加到另一个Java对象的属性中,但是您必须使用persist或merge方法通过实体管理器将该对象“发送”到数据库
public void addReviewToBook(String bookTitle, String comment) {
EntityManager em = ENTITY_MANAGER_FACTORY.createEntityManager();
Session session = em.unwrap(Session.class);
Criteria cr = session.createCriteria(Book.class);
cr.add(Restrictions.ilike("title", bookTitle));
Book book = null;
try {
book = (Book) cr.uniqueResult();
em.getTransaction().begin();
//not calling em.persist(new Review(comment)) but only using addReview method
book.addReview(new Review((comment)));
em.getTransaction().commit();
System.out.println("Review added to the book");
}
catch (HibernateException e) {
em.getTransaction().rollback();
e.printStackTrace();
}
finally {
em.close();
}
}