- 報錯
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance beforeQuery flushing
,這個問題應該是在使用@OneToMany時,沒有加級聯配置,導致一的一方還沒保存,就準備保存多方,但沒有得到一方的主鍵。解決方法是在@OneToMany後加入級聯配置,如@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
- 當使用@OneToMany單向操作時,需要在@OneToMany下加入
@JoinColumn(name="one_id")
配置,表示在多方的數據表中加入字段關聯到一方的ID - 報錯
Could not find any META-INF/persistence.xml file in the classpath
,如果沒有persistence.xml文件需要在src/main/resources
文件夾下創建META-INF/persistence.xml
文件,如果已經存在該文件,那麼可能是文件的輸出路徑不對,路徑應該和src/main/java
的路徑一致,請右擊項目-Build Path-Configure Build Path…-Java Build Path-Source-查看src/main/resources
的Output folder,雙擊,將其配置與src/mian/java
的Output folder一致,如圖:
- JPQL和HQL語法不太一樣,使用HQL查詢數據庫時可以使用
entityManager.createQuery( "from User", User.class ).getResultList()
,而使用JPQL時需要寫成entityManager.createQuery( "from User u", User.class ).getResultList()
- 使用EntityManager對象查詢數據時報錯
xx is not mapped from
,原因是hql語法是面向對象的,在查詢語句的from後面應該是類名,而不是表名,比如em.createQuery("from user", User.calss)
應寫成em.createQuery("from User", User.calss)
- 在OneToMany和ManyToOne雙向關聯中,直接通過EntityManager.remove(Object)刪除多方是不行的,需要先從一方的集合中將多方的對象刪除,再調用remove()方法從數據庫中刪除。
JPA&Hibernate問題記錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.