SessionFactory возвращает null в Hibernate - PullRequest
3 голосов
/ 30 мая 2020

Я новичок в Hibernate и столкнулся с проблемой при создании SessionFactory,

SessionFactoryProvider. java:

public class SessionFactoryProvider {

    private static SessionFactory factory;

    public static SessionFactory getFactory() {

        try {
            if (factory == null) {
                Configuration cfg = new Configuration().configure("hibernate.cfg.xml");

                factory = cfg.buildSessionFactory();
            }
        } catch (Exception e) {
            try {
                if (factory == null) {
                    Configuration configuration = new Configuration();
                    // Hibernate settings equivalent to hibernate.cfg.xml's properties
                    Properties property = new Properties();
                    property.put(Environment.DRIVER, "com.mysql.jdbc.Driver");
                    property.put(Environment.URL, "jdbc:mysql://localhost:3306/shopingsite");
                    property.put(Environment.USER, "root");
                    property.put(Environment.PASS, "");
                    property.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
                    property.put(Environment.SHOW_SQL, "true");
                    property.put(Environment.HBM2DDL_AUTO, "update");
                    property.put(Environment.POOL_SIZE, 12);
                    configuration.setProperties(property);
                    configuration.addAnnotatedClass(Category.class);
                    configuration.addAnnotatedClass(User.class);
                    configuration.addAnnotatedClass(Product.class);

                    ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                            .applySettings(configuration.getProperties()).build();
                    factory = configuration.buildSessionFactory(serviceRegistry);

                }
            } catch (HibernateException | NullPointerException he) {
                System.out.println("Both factory code Fail");
            }
        }

        return factory;
    }

    public static void shutdow() {
        factory.close();
    }
}

pom. xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>com.mycompany</groupId>
        <artifactId>MavenShopping</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>

        <name>MavenShopping</name>

        <properties>
            <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <compilerArguments>
                            <endorseddirs>${endorsed.dir}</endorseddirs>
                        </compilerArguments>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.6</version>
                    <executions>
                        <execution>
                            <phase>validate</phase>
                            <goals>
                                <goal>copy</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${endorsed.dir}</outputDirectory>
                                <silent>true</silent>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>javax</groupId>
                                        <artifactId>javaee-endorsed-api</artifactId>
                                        <version>7.0</version>
                                        <type>jar</type>
                                    </artifactItem>
                                </artifactItems>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.4.6.Final</version>
                <type>jar</type>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.16</version>
            </dependency>
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <version>8.0</version>
                <type>jar</type>
            </dependency>
        </dependencies>
    </project>

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.hbm2ddl.auto">update</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/shopingsite</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password"/>
    <property name="show_sql">true</property>
    <property name="hibernate.connection.autocommit">true</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <mapping class="BeanFile.Category"/>
    <mapping class="BeanFile.Product"/>
    <mapping class="BeanFile.User"/>
  </session-factory>
</hibernate-configuration>

Ошибка, которая отображалась в журнале, показана ниже

Info:   MavenShopping was successfully deployed in 1,530 milliseconds.
Info:   1
Info:   HHH000412: Hibernate Core {5.4.6.Final}
Info:   ******************************************
Info:   HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
WARN:   HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Info:   HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/shopingsite]
Info:   HHH10001001: Connection properties: {user=root, password=****, autocommit=true}
Info:   HHH10001003: Autocommit mode: true
Warning:   StandardWrapperValve[RegistrationServlet]: Servlet.service() for servlet RegistrationServlet threw exception
java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;I)V

Как это решить?

Ответы [ 2 ]

0 голосов
/ 12 июня 2020

Проблема с вашей Hibernate SessionFactory имеет какое-то отношение к вашей среде. Похоже, что ваши библиотеки времени компиляции не такие же, как библиотеки времени выполнения, как метод одного из классов, которые вы используете, когда кодирования нет, когда сервер запускается.

java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;I)V

Кажется, быть большой проблемой, вызывающей проблемы с созданием SessionFactory .

0 голосов
/ 30 мая 2020

Я столкнулся с той же проблемой.

Вам нужно добавить к jboss-logging зависимость в pom.xml.

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.2.Final</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...