Java 如何使用Eclipse通过Hbernate连接到MySql

Java 如何使用Eclipse通过Hbernate连接到MySql,java,mysql,eclipse,hibernate,orm,Java,Mysql,Eclipse,Hibernate,Orm,我不熟悉冬眠和日食。我通过观看youtube视频成功地完成了与德比的合作。现在我想用MySql来做 我成功地将MySQL连接到eclips 接下来,我编写了简单的persistent类person 导入javax.persistence.Entity; 导入javax.persistence.Id @实体 公共阶层人士{ private String name; private int id; public String getName() { return name; } publ

我不熟悉冬眠和日食。我通过观看youtube视频成功地完成了与德比的合作。现在我想用MySql来做

我成功地将MySQL连接到eclips

接下来,我编写了简单的persistent类person 导入javax.persistence.Entity; 导入javax.persistence.Id

@实体 公共阶层人士{

private String name;
private int id;


public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
@Id
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
}


接下来,我为此编写了一个测试类

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;


public class PersonTest {

    /**
     * @param args
     */
    public static void main(String[] args) {

        AnnotationConfiguration cfg = new AnnotationConfiguration();
        cfg.addAnnotatedClass(Person.class);
        cfg.configure("hibernate.cfg.xml");

        new SchemaExport(cfg).create(true, true);

        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.getCurrentSession();
        session.beginTransaction();

        Person person = new Person();

        person.setName("Alex");
        person.setId(1);

        session.save(cfg);
        session.getTransaction().commit();

    }

}

我的Hibernate配置文件

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/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/ruwaKuppi</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1234</property>
        <property name="hibernate.default_schema">ruwaKuppi</property>

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

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping resource="person.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/ruwaKuppi
根
1234
鲁瓦库皮
2.
org.hibernate.dialogue.mysqldialogue
更新

我的映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="Person" table="PERSON">
   <id name="id" type="int" column="ID" >
   <generator class="assigned"/>
  </id>

  <property name="name">
   <column name="NAME" />
  </property>

 </class>
</hibernate-mapping>


现在我得到了这个错误。。。。 ![在此处输入图像描述][2]

13:13:17795信息版本:15-Hibernate注释3.4.0.GA 13:13:17818信息环境:560-Hibernate 3.3.2.GA 13:13:17821信息环境:593-找不到hibernate.properties 13:13:17825信息环境:771-字节码提供程序名称:javassist 13:13:17830信息环境:652-使用JDK1.4java.sql.Timestamp处理 13:13:17927信息版本:14-Hibernate Commons Annotations 3.1.0.GA 13:13:17949信息配置:1474-从资源配置:hibernate.cfg.xml 13:13:17950信息配置:1451-配置资源:hibernate.cfg.xml 13:13:18059信息配置:600-从资源读取映射:person.hbm.xml 13:13:18147信息配置:1589-配置的会话工厂:null 13:13:18173信息方言:175-使用方言:org.hibernate.dialogue.mysqldialogue 13:13:18307信息HbmBinder:322-映射类:Person->Person 13:13:18326信息AnnotationBinder:419-来自注释类的绑定实体:Person 13:13:18364信息映射:161-重复导入:个人->个人 13:13:18367信息实体绑定器:422-将实体人员绑定到表人员 线程“main”org.hibernate.DuplicateMappingException中的异常:重复类/实体映射人 位于org.hibernate.cfg.Mappings.addClass(Mappings.java:141) 位于org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:789) 位于org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546) 位于org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291) 位于org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:803) 位于org.hibernate.tool.hbm2ddl.SchemaExport.(SchemaExport.java:128) 位于org.hibernate.tool.hbm2ddl.SchemaExport.(SchemaExport.java:91) 在PersonTest.main(PersonTest.java:18)

请任何人帮我摆脱这混乱。。。非常感谢你的关心

p、 s:我知道最后一个代码不清楚……我想这是上面的重要一行

13:13:18367信息实体绑定器:422-将实体人员绑定到表人员 线程“main”org.hibernate.DuplicateMappingException中的异常:重复类/实体映射人
在org.hibernate.cfg.Mappings.addClass(Mappings.java:141)

中,您告诉hibernate从hibernate.cfg.xml文件加载映射:

cfg.configure("hibernate.cfg.xml");
但您也告诉它将Person类添加为映射实体:

cfg.addAnnotatedClass(Person.class);

决定是使用注释还是使用XML映射Person实体。如果选择XML,则删除
cfg.addAnnotatedClass(Person.class)行。如果选择注释,则从XML文件中删除
(当然还有它的所有子元素)。

从Person类id的getter中删除注释'@id'

@Entity public class Person {

private String name;
@Id
private int id;



public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}

}
测试班 公共类个人测试{

/**
 * @param args
 */
public static void main(String[] args) {
 Person person = new Person();

    person.setName("Alex");
    person.setId(1);

    SessionFactory factory =  Configuration().configure().buildSessionFactory();
    Session session = factory.openSession();
    session.beginTransaction();
    session.save(person);
    session.getTransaction().commit();

}

}
hibernate.cfg.xml


com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/ruwaKuppi
根
1234
1.
org.hibernate.dialogue.mysqldialogue
org.hibernate.cache.NoCacheProvider
真的
创造
无需添加映射文件 确保您的HibernateJAR包含在JDBCJAR中。 包含来自lib字节码javassist的jar, jpa和必修课。
检查hibernate.cfg.xml文件,它应该包含在src文件夹中

然后我应该从hibernate.cfg.xml中删除吗?亲爱的JB NIzet
我删除了它,并出现了新的错误,(我以前在插入person.hbm.xml文件之前遇到过这个错误)现在我将它取回
14:33:23608信息SessionFactoryObjectFactory:105-未将工厂绑定到JNDI,未配置JNDI名称14:33:23612信息模式更新:155-在线程“main”中运行hbm2ddl模式更新异常org.hibernate.hibernate异常:在org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:‌ ​620)在PersonTest.main(PersonTest.java:21)我现在应该做什么..提前感谢您,我删除了它,并出现了新的错误,(我以前在插入person.hbm.xml文件之前遇到过这个错误)现在我将它取回
14:33:23608信息SessionFactoryObjectFactory:105-未将工厂绑定到JNDI,未配置JNDI名称14:33:23612信息模式更新:155-在线程“main”中运行hbm2ddl模式更新异常org.hibernate.hibernate异常:没有配置CurrentSessionContext!在PersonTest.main(PersonTest.java:21)的org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:620)中,我现在应该做什么..提前感谢您将线程添加到XML配置文件中,并阅读以了解其含义。
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//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/ruwaKuppi</property>
    <property name="connection.username">root</property>
    <property name="connection.password">1234</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>

    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>

    <!-- Names the annotated entity class -->
    <mapping class="Put your package name and class name here"/>

</session-factory>

</hibernate-configuration>