我知道這是一個很常見的話題,我也讀過很多與之相關的博客和帖子,但大多數人只是告訴大家,save()回傳一個識別符號,而persist()的回傳型別是void。兩者都屬于org.hibernate包。
我也看了下面的帖子-
對于那些不使用intelli j的人來說,
instructor_id作為表course中的外鍵,參考instructor(id),同樣,其他表也是如此。我試圖通過以下方式將課程保存到一個教員那里--
session.beginTransaction()。 //從資料庫中獲取講師。 int theId = 1; Instructor tempInstructor = session.get(Instructor.class, theId)。 //創建一些課程 = session.get(Instructor.class, id); //創建一些課程 Course tempCourse1 = new Course("Java") 。 Course tempCourse2 = new Course("Maven"/span>)。 tempInstructor.add(tempCourse1, tempCourse2); session.save(tempInstructor)。 //Commit transaction session.getTransaction().commit()。在
Instructor類中的相關條目-@OneToMany(mappedBy = "instructor", cascade = {CascadeType.DETACH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) private List<Course> courses;add方法在Instructor-public void add(Course...tempCourse) { if ( courses == null) { courses = new ArrayList<>()。 } for (Course course : tempCourse) { courses.add(course); course.setInstructor(this) 。 } }在
Course類中的相關條目-@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinColumn(name = "instructor_id") private Instructor instructor; // Associated Entity當我試圖用
session.save(tempInstructor);來保存教員時,沒有一個課程與教員一起被保存,但當我使用session.persist()時,兩個課程也被保存。我知道save()立即回傳一個識別符號和INSERTS物件,那么為什么它不能保存課程呢?請幫助我解決這個困惑。我還在某處讀到save()不適合在 長時間運行的對話中不適合使用擴展的Session/persistence 背景關系。
誰能解釋一下當我呼叫save時都發生了什么,為什么物件沒有被保存。如果我錯過了一些基本的東西,請原諒,我是這方面的新手。
uj5u.com熱心網友回復:
在你的例子中,
tempCourse1和tempCourse2處于分離狀態,所以要建立一個關系,你需要持久化它們。save和persist都在做同樣的事情,但是save是Hibernate的API,persist是JPA規范的一部分。在你的物體上,你有
CascadeType.PERSIST,它只與persist方法有關。為了使save的行為相同,你應該在你的ManyToOne注解中加入org.hibernate.annotations.CascadeType#SAVE_UPDATE。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/309821.html標籤:
