休眠未知实体(不缺少@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,也可以使用映射配置文件。