休眠未知实体(不缺少@entity或import javax.persistence.entity)
我有一个非常简单的课程:休眠未知实体(不缺少@entity或import javax.persistence.entity),java,hibernate,Java,Hibernate,我有一个非常简单的课程: import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "user
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
@Column(name = "firstName")
private String firstName;
@Column(name = "lastName")
private String lastName;
@Column(name = "email")
private String email;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private long id;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
我称之为使用此主菜单:
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HibernateUtil.buildSessionFactory();
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
User u = new User();
u.setEmail("david@hello.co.uk");
u.setFirstName("David");
u.setLastName("Gray");
session.save(u);
session.getTransaction().commit();
System.out.println("Record committed");
session.close();
}
}
我一直收到这个MappingException:
线程“main”org.hibernate.MappingException中的异常:未知实体:org.assessment.com.entity.User
位于org.hibernate.internal.SessionFactoryImpl.getEntityypersister(SessionFactoryImpl.java:1172)
位于org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1316)
位于org.hibernate.event.internal.AbstractSaveEventListener.SaveWithGenerateId(AbstractSaveEventListener.java:117)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)上
位于org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
位于org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
位于org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:670)
位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:662)
位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:658)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
在$Proxy4.save(未知来源)
Main.Main(Main.java:20)
我的目标是:
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
public static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
return new Configuration().configure().buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
sessionFactory = new Configuration().configure().buildSessionFactory(serviceRegistry);
return sessionFactory;
}
}
有没有人有什么想法,因为我已经看过这么多的副本,但决议似乎不适合我。这是我的hibernate.cfg.xml:
com.mysql.jdbc.Driver
jdbc:mysql://localhost/ssme
根
我的密码
1.
org.hibernate.dialogue.mysqldialogue
线
org.hibernate.cache.NoCacheProvider
真的
更新
您有persistence.xml
或hibernate.cfg.xml
吗?如果您必须在其中添加映射类,那么hibernate可以理解您的类正在映射到数据库。如果您有hibernate.cfg.xml
,您可以这样添加
<mapping class="com.entity.Users"/>
您应该使用
注释配置
而不是配置
,然后调用
configuration.addAnnotatedClass(User.class);
将您的类添加到映射类列表中。在
之前添加到hibernate.cfg.xml
:
<mapping class="org.assessme.com.entity.User" />
考虑使用所述的
注释配置
您可以使用它的addClass(User.class)
方法,或者如果要持久化多个实体,则可以使用addPackage(“org.assessme.com.entity”)
方法
你正在用这个HibernateUtil
类重新发明轮子。考虑使用Spring,这样你就可以利用一些类似于它的代码> AnnotationSessionFactoryBean < /Cord>。 < P>我忘记把HBMXML映射添加到我的CFG.XML文件中。我一添加它,这个异常就消失了
<mapping resource="com/mycompany/backend/hibernate/CServiceCenters.hbm.xml" />
将下面的行添加到hibernate.cfg.xml
<mapping class="fully qualified Entity class name"/>
我也遇到了类似的问题,但当我用方言添加MySQL版本时,问题得到了解决。
org.hibernate.dialogue.mysql8dialogue
兼容性似乎有问题。啊,我应该在我的hibernateutil中这样做吗?你认为在一个类中完成这一切是最好的做法吗?取决于项目的规模。如果您只有几个映射类,则可以在HibernateUtil
中执行此操作。对于更大的项目,您可以使用反射将特定包的所有类添加到hibernate,也可以使用映射配置文件。