休眠基本示例不起作用

Posted

技术标签:

【中文标题】休眠基本示例不起作用【英文标题】:Hibernate Basic Example not working 【发布时间】:2015-11-16 13:44:44 【问题描述】:

我正在尝试实现一个基本的 Hibernate 示例,但我无法让它工作。

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

public class SimpleTest 

    public static void main(String[] args) 

        SessionFactory sessionFactory = new Configuration().
                configure().buildSessionFactory();
        Session session = sessionFactory.getCurrentSession();
        Transaction tx = session.beginTransaction();

        Lecturer lecturer1 = new Lecturer();
        lecturer1.setFirstName("Fatma");
        lecturer1.setLastName("Meawad");

        session.save(lecturer1);
        tx.commit();

        System.out.println
                ("The lecturer " + lecturer1.getFirstName()+ " "
                        + lecturer1.getLastName()+" is successfully added to your database");

    

每次我尝试运行它时都会得到:

线程“主”org.hibernate.HibernateException 中的异常:无法 建立 JDBC 连接 [jdbc:mysql//127.0.0.1:3306/sampledb] org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:77) 在 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106) 在 org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 在 org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260) 在 org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) 在 org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 在 org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928) 在 SimpleTest.main(SimpleTest.java:11) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

我今天刚开始使用 Hibernate,但经过一整天的尝试,我无法让一个基本示例(我尝试了其他示例)工作。我忘记了什么?

编辑:我的 hibernate.cfg.xml

    <?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>

        <!-- ________________ To be Edited _________________ -->

        <property name="connection.url">jdbc:mysql//127.0.0.1:3306/sampledb</property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>

        <!-- _____________ End of To be Edited ______________ -->


        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>


        <!-- _________ Defining the Mapping Files ___________ -->

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

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

【问题讨论】:

你能手动连接到这个数据库吗? 是的,我可以连接数据库了。 您能否将hibernate.cfg.xml的内容添加到问题中。 你的 connection.url 值是 hibernate.cfg.xml 文件中的 jdbc:mysql//127.0.0.1:3306/MySQL/sampledb 但是在错误日志中是 jdbc:mysql//127.0.0.1:3306/sampledb。怎么样? 我尝试了更多方法来修复它,并编辑了 hibernate.cfg.xml 文件。我已经更正了。 【参考方案1】:
    <property name="hibernate.hbm2ddl.auto">update</property>

在你的 hibernate.cfg.xml 中添加这个,然后再试一次

【讨论】:

您能否解释一下为什么这会解决问题?

以上是关于休眠基本示例不起作用的主要内容,如果未能解决你的问题,请参考以下文章

休眠映射不起作用

休眠教程不起作用

如果不在事务中,休眠 session.update 不起作用

流利的休眠 HasOne WithForeignKey 不起作用

默认列值在休眠中不起作用

当使用多个数据源时,休眠环境不起作用