虽然有几个问题与此例外相关,但是,这不是可能的重复。通过多次迭代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