java - Hibernate 连接无法在 Apache Tomcat 启动时运行

标签 java spring hibernate mysql-workbench

我正在尝试与我的 MySQL 数据库进行通信,并让 hibernate 将一个表插入到我的数据库中。每当我运行 Apache Tomcat 时,服务器都会启动,但找不到 Hibernate SQL,并且我的数据库未填充表。

模型类:

package com.spring.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

//Hibernate looks for the @Entity and will create a table with the name 'Book'
@Entity(name = "Book")
public class Book {

    @Id //Tell hibernate this is a primary key
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String author;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    @Override
    public String toString() {
        return "Book [id=" + id + ", title=" + title + ", author=" + author + "]";
    }
}

配置文件:

package com.spring.config;

import static org.hibernate.cfg.AvailableSettings.C3P0_ACQUIRE_INCREMENT;
import static org.hibernate.cfg.AvailableSettings.C3P0_MAX_SIZE;
import static org.hibernate.cfg.AvailableSettings.C3P0_MAX_STATEMENTS;
import static org.hibernate.cfg.AvailableSettings.C3P0_MIN_SIZE;
import static org.hibernate.cfg.AvailableSettings.C3P0_TIMEOUT;
import static org.hibernate.cfg.AvailableSettings.DRIVER;
import static org.hibernate.cfg.AvailableSettings.HBM2DDL_AUTO;
import static org.hibernate.cfg.AvailableSettings.PASS;
import static org.hibernate.cfg.AvailableSettings.SHOW_SQL;
import static org.hibernate.cfg.AvailableSettings.URL;
import static org.hibernate.cfg.AvailableSettings.USER;

import java.util.Properties;

import org.hibernate.cfg.Environment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
//Where is the property file located
@PropertySource("classpath:db.properties")
//Enable transactions
@EnableTransactionManagement
//These are the packages to scan for components
@ComponentScans(value = {
        @ComponentScan("com.spring.dao"),
        @ComponentScan("com.spring.service")
})
public class AppConfig {
    //Create two bins => One on local session factory bean and another one on hibernate transaction manager.
    //The local session factory bean will read the properties file and set the properties and return a local session factory bean
    //In the hybrid transaction manager you will set the session factory.

    @Autowired
    private Environment env;

    @Bean
    public LocalSessionFactoryBean getSessionFactory() {
        LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();

        Properties props = new Properties();
        //Setting the JDBC properties from the properties file(db.properties).
        props.setProperty(DRIVER, "com.mysql.cj.jdbc.Driver");
        props.setProperty(URL, "jdbc:mysql://localhost:3306/bookapi");
        props.setProperty(USER, "root");
        props.setProperty(PASS, "thisismypasswordlol");

        //Setting the hibernate properties from db.properties
        props.setProperty(SHOW_SQL, "true");
        props.setProperty(HBM2DDL_AUTO, "update");

        //Setting the C3P0 properties from db.properties
        props.setProperty(C3P0_MIN_SIZE, "5");
        props.setProperty(C3P0_MAX_SIZE, "20");
        props.setProperty(C3P0_ACQUIRE_INCREMENT, "1");
        props.setProperty(C3P0_TIMEOUT, "1800");
        props.setProperty(C3P0_MAX_STATEMENTS, "150");

        factoryBean.setHibernateProperties(props);
        factoryBean.setPackagesToScan("com.spring.model");

        return factoryBean;
    }

    //SessionFactory is a factory class for Session objects. It is available for the whole application while a sesison is only available for
    //a particular transaction. SessionFactory => Car manufacturing plant, Session => Car => Session objects store information needed for a particular
    //user's session on the web server.
    @Bean
    public HibernateTransactionManager getTransactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(getSessionFactory().getObject());
        return transactionManager;
    }
}

消息:

Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name:   Apache Tomcat/9.0.21
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Jun 4 2019 20:19:36 UTC
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version number: 9.0.21.0
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Windows 10
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            10.0
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             C:\Program Files\Java\jre1.8.0_211
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_211-b12
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         C:\Users\Desktop\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         C:\Users\Documents\apache-tomcat-9.0.21
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=C:\Users\Desktop\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=C:\Users\Documents\apache-tomcat-9.0.21
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dwtp.deploy=C:\Users\Desktop\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=C:\Users\Documents\apache-tomcat-9.0.21\endorsed
Jul 09, 2019 9:33:54 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dfile.encoding=Cp1252
Jul 09, 2019 9:33:54 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_211\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/Java/jre1.8.0_211/bin/server;C:/Program Files/Java/jre1.8.0_211/bin;C:/Program Files/Java/jre1.8.0_211/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Users\AppData\Local\Microsoft\WindowsApps;C:\Users\AppData\Local\atom\bin;C:\Users\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\AppData\Roaming\npm;C:\Users\Desktop\work;;.]
Jul 09, 2019 9:33:57 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Jul 09, 2019 9:33:57 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Jul 09, 2019 9:33:57 PM org.apache.catalina.startup.Catalina load
INFO: Server initialization in [3,690] milliseconds
Jul 09, 2019 9:33:57 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
Jul 09, 2019 9:33:57 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/9.0.21]
Jul 09, 2019 9:33:58 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Jul 09, 2019 9:33:58 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Jul 09, 2019 9:33:58 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in [287] milliseconds

运行 Apache 后,我应该看到 Hibernate 将表插入到我的数据库中。

最佳答案

改变

props.setProperty(HBM2DDL_AUTO, "update"); 

props.setProperty(HBM2DDL_AUTO, "create");

关于java - Hibernate 连接无法在 Apache Tomcat 启动时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56962328/

相关文章:

java - 认识 Java EE 项目

java - Hibernate 标识符生成异常 : unrecognized id type : uuid-binary

java - 从 SQLQuery 结果中的 id 列获取 Hibernate Entity 实例

java - 尝试使用 Java KeyStore 类将自签名 CA 证书导入 Windows 根信任库时无法阻止/绕过用户提示

java - 流接口(interface) : How empty() method returns Iterable?

java - 使用 Android 应用程序将视频上​​传到 YouTube 时的身份验证问题

java - 用spring boot实现OTP登录

java - JAX-RS 中不同的 HTTP 方法返回什么?

java - MySQl 和 autoReconnect=true 仍然给我异常

PostgreSQL 和 Hibernate java.io.IOException : Tried to send an out-of-range integer as a 2-byte value