保存新对象时,Hibernate未知实体错误

Student s = (Student) db.getByID(Student.class,1); s.setFirstName("Preston"); db.saveOrUpdate(s); <--Successful save s = new Student(){{setFirstName("asdf");setLastName("asdf1");}}; s.setSchool((School) db.getByID(School.class, 1)); db.saveOrUpdate(s); <--Error occurs 

线程“main”中的exceptionorg.hibernate.MappingException:未知实体:project.databaseio.TestClass $ 1

 public void saveOrUpdate(Object object) { Transaction tx = sessionFactory.getCurrentSession().beginTransaction(); sessionFactory.getCurrentSession().saveOrUpdate(object); tx.commit(); } 

堆栈跟踪

 Exception in thread "main" org.hibernate.MappingException: Unknown entity: project.databaseio.TestClass$1 at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:548) at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338) at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180) at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:487) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:84) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) at com.sun.proxy.$Proxy0.saveOrUpdate(Unknown Source) at project.databaseio.DatabaseConnection.saveOrUpdate(DatabaseConnection.java:117) at project.databaseio.TestClass.main(TestClass.java:21) 

Hibernate Config for Student

                              

问题来自以下几行:

 s = new Student(){{setFirstName("asdf");setLastName("asdf1");}}; 

简而言之,这一行是创建一个内部类的新实例,它隐式inheritance自Student类。 这个类被Java编译器命名为TestClass$1 ,因为没有映射,Hibernate抱怨它。 你需要做的是:

 s = new Student(); s.setFirstName("blah"); s.setLastName("blah2"); s.setSchool((School) db.getByID(School.class, 1)); 

您的实体Student的声明似乎不正确。 如果您正在使用注释,那么请正确注释您的类@javax.persistence.Entity annotaton。

我遇到了类似的问题,我的eclipse有java的版本问题,它无法构建代码,所以当我在我的hibernate.cfg.xml中添加新的实体条目时,它没有刷新旧的,因此当hibernate试图寻找实体,它无法得到它。

我通过删除工作区的bin位置中的旧hibernate.cfg.xml解决了这个问题,然后粘贴了新的hibernate.cfg.xml和宾果游戏。