Hibernate之Mysql或Mariadb数据库连接问题

Hibernate之Mysql或Mariadb数据库连接问题

项目是用Maven做的build,配置主要需要注意一下几个地方:

1. 数据库Mysql或Mariadb

 yum repository:

http://mirrors.neusoft.edu.cn/mariadb/mariadb-10.0.16/

Mariadb:

https://mariadb.com/kb/en/mariadb/

<dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>1.1.8</version>
	    <scope>compile</scope>
</dependency>
<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.9</version>
</dependency>

2. Hibernate 版本 4.3.8.Final

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.8.Final</version>
			<scope>compile</scope>
        </dependency>

 3. src\main\resources\hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!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>
  	<property name="hibernate.connection.driver_class">org.mariadb.jdbc.Driver</property>
    <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
    <property name="hibernate.connection.password">passw0rd</property>
    <property name="hibernate.connection.url">jdbc:mariadb://9.114.194.77:3306/cody</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="use_sql_comments">false</property>
    <mapping resource="com/mkyong/customer/hibernate/Customer.hbm.xml" />
  </session-factory>
</hibernate-configuration>

错误:Error calling Driver#connect,connect refused...

xxx is not allowed to connect to this MariaDB server

类似这样的错。

需要注意以下几个地方:

1.  hibernate.cfg.xml的配置

<property name="hibernate.connection.driver_class">org.mariadb.jdbc.Driver</property>
 <property name="hibernate.connection.url">jdbc:mariadb://9.114.194.77:3306/cody</property>

 2. 检查SessionFactory 是不是正常

参考官方文档:

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch01.html#tutorial-firstapp-firstclass

public class HibernateListener implements ServletContextListener{
 
    private Configuration config;
    private SessionFactory factory;
    private String path = "/hibernate.cfg.xml";
    private static Class clazz = HibernateListener.class;
 
    public static final String KEY_NAME = clazz.getName();
 
	public void contextDestroyed(ServletContextEvent event) {
	  //
	}
 
	public void contextInitialized(ServletContextEvent event) {
 
	 try { 
	        URL url = HibernateListener.class.getResource(path);
	        config = new Configuration().configure(url);
	        System.out.println("Hibernate Configuration loaded");
	        
	        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
	        System.out.println("Hibernate serviceRegistry created");
	        
	        factory = config.buildSessionFactory(serviceRegistry);
	        System.out.println("Session Factory:" + factory.toString());
	        
	        //save the Hibernate session factory into serlvet context
	        event.getServletContext().setAttribute(KEY_NAME, factory);
	  } catch (Exception e) {
	         System.out.println(e.getMessage());
	         e.printStackTrace();
	   }
	}
}

 3. 数据库的授权:

通常这种修改都是web server 和 db在两个机器上,所以有个访问权限的问题。

通常访问的时候会以 root@<web server ip>的形式,这就需要授权和添加相关的用户密码才能访问db。

可以参考这篇文章:

http://www.cnblogs.com/xyzdw/archive/2011/08/11/2135227.html

一、在安装mysql/MariaDB的机器上运行:

1、mysql -h localhost -u root -p //这样应该可以进入MySQL/MariaDB服务器

2、mysql>GRANT   ALL   PRIVILEGES   ON   *.*   TO   'root'@'%'   WITH   GRANT   OPTION //赋予任何主机访问数据的权限

3、mysql>FLUSH   PRIVILEGES //修改生效

4、mysql>EXIT //退出DB

二、配置mysql数据库的user 表的‘%’用户信息:

MariaDB [mysql]> UPDATE user SET Password=PASSWORD('newpwd') WHERE User='root';
MariaDB [mysql]>FLUSH PRIVILEGES;
MariaDB [mysql]>exit;

错误:

hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

 参考文档:

http://www.tuicool.com/articles/7FZrYzE

相关推荐