有几个类似主题的问题,但我进行了彻底的调查,但没有一个能解决我的问题。
我正在开发一个 MVC Java 项目。我使用 Spring 3、Tomcat 8、MySQL 5 和 Hibernate 4。我手动创建了一个数据库、一个表和一行。我的 Eclipse 项目无法访问数据库,尽管一切似乎都已就位且配置正确。
这是我的基础 DAO:
public class BaseDAOImpl<ENTITY> implements BaseDAO<ENTITY> {
private SessionFactory sessionFactory;
private Class<ENTITY> entityClass;
public BaseDAOImpl() {
this.entityClass = (Class<ENTITY>) ((ParameterizedType)
getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
// Other methods relying on the session //
@Override
public ENTITY createOrUpdate(ENTITY entity) {
Session session = getSession();
if (session==null) {
//throw new ConnectException();
}
session.saveOrUpdate(entity);
return null;
}
protected Session getSession() {
if (sessionFactory == null) {
initializeSessionFactory();
}
return this.sessionFactory.getCurrentSession();
}
public void initializeSessionFactory() {
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
}
}
和 hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQL5Dialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost/sudomusic
</property>
<property name="hibernate.connection.port">
3307
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
kk
</property>
<!-- List of XML mapping files -->
<mapping class="com.evolusound.sudomusic.domain.Customer"/>
</session-factory>
</hibernate-configuration>
因此,当我尝试在数据库中保存新客户时,我收到 JDBC 连接异常。我最关心的事情是:我是否在 DAO 中以正确的方式创建了 sessionFactory? hibernate.cfg.xml 中是否缺少任何内容?它应该自动将我的 Customer.java 与 Customer 表映射,对吧?我不知道的是链条中缺少了哪一环,而且明明是连接,但我不知道在哪一步。是配置不正确还是第一次尝试失败了?任何帮助将不胜感激。
__
如果有帮助的话,Eclipse 框架似乎能够使用 mySQL 连接通过数据源资源管理器查看数据库。但是,它看不到其中的表格。我确信凭据是正确的(root、kk),因为我在命令行和 MySQL Workbench 中使用它们。一些帮助将非常感激。
__
这是控制台输出:
[Request processing failed; nested exception is org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect] with root cause
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2132)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75)
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
at com.evolusound.sudomusic.data_access.BaseDAOImpl.initializeSessionFactory(BaseDAOImpl.java:73)
...
AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://localhost/sudomusic]
最佳答案
您的端口号正确吗? MySQL 的默认端口是 3306,但您已在 XML 中指定了 3307:
<property name="hibernate.connection.url">
jdbc:mysql://localhost/sudomusic
</property>
<property name="hibernate.connection.port">
3307
</property>
您的问题是您尝试连接到 localhost:3306 上的 MySQL,但连接被拒绝,可能是因为 MySQL 未运行,或者端口错误。
关于java - 配置 Hibernate mySQL 连接时出错 - 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226322/