使用hibernate将对象保存到数据库中

时间:2014-03-13 00:29:33

标签: java hibernate

我有一个名为Student_Info的{​​{1}}模型对象。

在同一个包中,我有一个Main类,我在其中创建了com.hibernate的实例:

Student_Info

public class Main { public static void main(String[] args) { Student_Info student = new Student_Info(); student.setRollNo(1); student.setName("Ichigo"); SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(student); session.getTransaction().commit(); session.close(); sessionFactory.close(); } } 文件中我有这个:

hibernate.cfg.xml

但是当我运行Main类时,我收到了这个错误:

<?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/hibernatedb</property>
        <property name="connection.username">root</property>
        <property name="connection.password">toor</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>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.internal.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>

        <mapping resource="com.hibernate.Student_Info" />
    </session-factory>
</hibernate-configuration>

所以我写的内容有什么不对,我认为一切都设置正确。

编辑:

这是我的项目文件夹结构:

enter image description here

编辑2:

这是Exception in thread "main" org.hibernate.MappingNotFoundException: resource: com.hibernate.Student_Info not found at org.hibernate.cfg.Configuration.addResource(Configuration.java:767) at org.hibernate.cfg.AnnotationConfiguration.addResource(AnnotationConfiguration.java:123) at org.hibernate.cfg.AnnotationConfiguration.addResource(AnnotationConfiguration.java:46) at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2255) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2227) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2207) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:213) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:46) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2160) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:201) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:46) at org.hibernate.cfg.Configuration.configure(Configuration.java:2075) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:183) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:46) at org.hibernate.cfg.Configuration.configure(Configuration.java:2054) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:177) at com.hibernate.Main.main(Main.java:16) 类:

Student_Info

编辑3:

我在包@Entity @Table(name="STUDENT_INFORMATION") public class Student_Info { @Id private int rollNo; private String name; public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 中创建了一个名为Student_Info.hbm.xml的文件:

com.hibernate

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hibernate.Student_Info" table="STUDENT_INFORMATION" catalog="hibernatedb"> <id name="rollNo" type="int"> <column name="rollNo" /> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="name" /> </property> </class> </hibernate-mapping> 我改变了这一行:

hibernate.cfg.xml

使用:

<mapping resource="com.hibernate.Student_Info" />

但是当我运行Main类时,我收到了这个错误:

<mapping resource="com.hibernate.Student_Info.hbm.xml" />

5 个答案:

答案 0 :(得分:1)

试试这个

@Entity

@Table(name="STUDENT_INFORMATION")

public class Student_Info {

    @Id
    @column(name="your id column name") 
    private int rollNo;

    @column(name="your name column name") 
    private String name;

    public int getRollNo() {
        return rollNo;
    }

    public void setRollNo(int rollNo) {
        this.rollNo = rollNo;
    }

    public String getName() {
        return name;
    }

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



}

您没有指定任何映射到您的表,如果您没有提供任何映射,那么ORM引擎将检查数据库中的相同列名作为默认选项仍然如果没有找到任何内容它将抛出映射异常。启用您的日志并找到有关Hibernate如何工作的更多信息...

希望这有用!

答案 1 :(得分:1)

我认为这不正确&gt;

<mapping resource="com.hibernate.Student_Info" />

这告诉hibernate hbm文件不在哪里定位实体,然后在hbm.xml文件中你可以添加实体。

<class name="Student_Info" table="Student_Info ">
    ...
</class>

确实

com.hibernate.Student_Info not found

表示没有com.hibernate.Student_Info文件,请考虑阅读this

<强>更新

为了修复下一个异常,你应该考虑将文件重命名为java所说的。

Exception in thread "main" org.hibernate.MappingNotFoundException: resource: com.hibernate.Student_Info.hbm.xml not found

这意味着你应该使用

<mapping resource="Student_Info.hbm.xml" />

文件名必须是名称* Student_Info.hbm.xml *应该是hibernate.cfg.xml的级别

答案 2 :(得分:1)

问题出在hibernate.cfg.xml文件的映射标记中。

解决方案适用于基于注释的映射

如果您使用注释 - 那么在映射标记的hibernate.cfg.xml文件中使用 属性而不是 资源 即可。 它应该是

<mapping class="com.hibernate.Student_Info"/>

针对基于XML的映射的解决方案

如果要使用单独的hbm文件进行映射,则应在hibernate.cfg.xml文件中使用映射文件中的resource属性。但在这种情况下,您必须像下面一样指定hbm文件位置(使用/而不是。

<mapping resource="com/hibernate/Student_Info.hbm.xml"/>

希望这能解决您的问题。

答案 3 :(得分:0)

你没有告诉hibernate Student_Info是一个实体。

请参阅http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-entity

答案 4 :(得分:0)

添加文件Student_Info.hbm.xml后,我不得不将其移到文件夹src中,并且它有效,但我必须更改此行:

<mapping resource="com.hibernate.Student_Info.hbm.xml" />

到:

<mapping resource="Student_Info.hbm.xml" />