无法运行简单的Hibernate应用程序

时间:2017-03-26 22:38:02

标签: java mysql database hibernate jdbc

对不起,如果你认为这篇文章是重复的,但我无法找到并回答我的问题。也许你可以帮助我)谢谢。

"
INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@536f2a7e'
***Exception in thread "main" org.hibernate.MappingException: Unknown entity: org.javabrains.UserDetails
    at*** org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620)
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1627)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:682)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:674)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:669)
    at org.javabrains.Main.main(Main.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Main.java

package org.javabrains;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


/**
 * Created by roysez on 26.03.2017.
 */
public class Main {


public static void main(final String[] args)  throws Exception{
        UserDetails user = new UserDetails();
        user.setUserId(1);
        user.setUserName("Sergiy");

    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.save(user);
    session.getTransaction().commit();
    }
}

的hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
        <!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD//EN"
                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>

    <!-- Database connection settings -->
    <property name='connection.driver_class'>com.mysql.jdbc.Driver</property>
    <property name='connection.url'>jdbc:mysql://localhost:3306/hibernate</property>
    <property name='connection.username'>root</property>
    <property name='connection.password'>sergio161098</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name='connection.pool_size'>1</property>

    <!-- SQL dialect -->
    <property name='dialect'>org.hibernate.dialect.MySQLDialect</property>

    <!-- Echo all executed SQL to stdout -->
    <property name='show_sql'>true</property>
    <property name="hbm2ddl.auto">create</property>
    <!-- Mapping files -->

    <mapping class="org.javabrains.UserDetails"/>

</session-factory>
</hibernate-configuration>

UserDetails.java

package org.javabrains;

import org.hibernate.annotations.Entity;
import javax.persistence.Id;

/**
 * Created by roysez on 26.03.2017.
 */
@Entity
public class UserDetails {
    @Id
    private int userId;
    private String userName;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

我不知道该怎么做,尝试所有解决方案,但其中任何一个都无法帮助

2 个答案:

答案 0 :(得分:0)

我认为你应该在UserDetails.java中添加所有正确的注释:@ Table,@ Column,@ GeneratedValue等。 不要忘记在MySQL服务器上有一些架构。

如果您使用的是Hibernate 5,则必须使用javax.persistence.包进行注释

答案 1 :(得分:0)

如果您打算使用JPA API,我认为您应该更改UserDetails.java的第3行:

import org.hibernate.annotations.Entity;

使用JPA注释:

import javax.persistence.Entity;

Hibernate documentationorg.hibernate.annotations.Entity 替换javax.persistence.Entity,它只允许配置其他功能。