雖然有幾個問題與此例外相關,但是,這不是可能的重複。通過多次迭代Excel中使用APACHE POI牀單,我不得不使用JPA進行多對一的關係未保存的瞬態實例休眠
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
HSSFSheet sheet = wb.getSheetAt(i);
....
if(i=0)
{
Baseclass obj = new Baseclass();
obj.setname("name");
session.save(obj)
session.getTransaction().commit();
}
if(i=3)
{
Foreigclass obj2 = new Foreigclass();
obj2.setsection("2A");
Baseclass obj = new Baseclass();
--> obj2.setTransport(obj); // linking foreign keys // error comes here
session.save(obj2)
}
在標記線,我得到以下異常:
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: model.CepTransport
at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:294)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:537)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:311)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:321)
at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:294)
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4243)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:546)
at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:232)
可有人建議這裏有什麼問題? CASCADing屬性很好,如果數據只來自一個Excel工作表,那麼一切正常。
這裏的電子表格和Hibernate之間的連接是什麼?您在電子表格中閱讀,然後使用Hibernate持久化到RDBMS? – 2014-10-12 10:43:30
是的,值從Excel中讀取並保存到數據庫,使用休眠 – Abhinav 2014-10-12 10:48:24
好吧,FWIW你可以很容易地使用DataNucleus JPA從Excel中讀取對象,這種方式不需要單獨的API使用 – 2014-10-12 13:32:57