2015-04-26 7 views
0

Я работаю над проектом, который представляет собой простое объединение Spring, Hibernate, JSF, MySQL; и я запускаю его на Eclipse. Целью программы является добавление базы данных Person (id, имя, фамилия, пол, возраст и т. Д.) На MySQLWorkbench и запуск ее на сервере. Я использовал Spring4, Hibernate4, Primefaces 5.0.2 и Eclipse Luna в качестве инструментов. И я построил проект как maven. Когда я запускаю программу на главной, я хочу видеть, что новое лицо включено в мою таблицу. Я использовал команды «GRANT ALL ON» и «FLUSH PRIVILEGES» для пользователя, которого я создал, на терминале и получил сообщение «Query OK». Несмотря указав имя пользователя и пароль, необходимые файлы, я не могу добавить новую запись в моей структуре table.My проекта выглядит следующим образом:Ошибка подключения к базе данных

enter image description here

и другие файлы:

domain-classes.hbm.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
      "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class table="testPerson" name="com.hibernate.data.Person"> 
     <id column="person_id" type="int" name="id"> 
      <generator class="increment" /> 
     </id> 
     <property name="firstName" column="person_firstname" type="string" /> 
     <property name="lastName" column="person_lastname" type="string" /> 
     <property name="gender" column="person_gender" type="string" /> 
     <property name="age" column="person_age" type="int" /> 
    </class> 
</hibernate-mapping> 

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> 
     <!-- Database connection settings --> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/PERSONDB</property> 
     <property name="hibernate.connection.username">fulden2</property> 
     <property name="hibernate.connection.password">secret_pass</property> 
     <!-- SQL dialect --> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <!-- Show SQL --> 
     <property name="show_sql">true</property> 
     <!-- Specify session context --> 
     <property name="hibernate.current_session_context_class">thread</property> 
     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 
     <!-- Autocommit --> 
     <property name="hibernate.connection.autocommit">false</property> 
     <!-- Referring Mapping File --> 
     <mapping resource="domain-classes.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> 
    <!-- Enable Spring Annotation Configuration --> 
    <context:annotation-config /> 
    <!-- Scan for all of Spring components such as Spring Service --> 
    <context:component-scan base-package="com.*"></context:component-scan> 
    <!-- Create Data Source bean --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/PERSONDB" /> 
     <property name="username" value="fulden2" /> 
     <property name="password" value="secret_pass" /> 
    </bean> 
    <!-- Define SessionFactory bean --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation"> 
      <value>classpath:hibernate.cfg.xml</value> 
     </property> 
    </bean> 
    <!-- Transaction Manager --> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
    <!-- Detect @Transactional Annotation --> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 
</beans> 

pom.xml:

<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>test</groupId> 
    <artifactId>PersonApp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>PersonApp</name> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.0.2</version> 
     <configuration> 
      <source>1.4</source> 
      <target>1.4</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <url>http://maven.apache.org</url> 
    <repositories> 
    <repository> 
     <id>prime-repo</id> 
     <name>PrimeFaces Maven Repository</name> 
     <url>http://repository.primefaces.org</url> 
     <layout>default</layout> 
    </repository> 
    </repositories> 
<dependencies> 
    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <!-- Faces Implementation --> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.2.10</version> 
    </dependency> 
    <!-- Faces Library --> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.2.10</version> 
    </dependency> 
    <!-- Primefaces Version 5 --> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>5.2</version> 
    </dependency> 
    <!-- JSP Library --> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.1</version> 
     </dependency> 
    <!-- JSTL Library --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <!-- Primefaces Theme Library --> 
    <dependency> 
     <groupId>org.primefaces.themes</groupId> 
     <artifactId>blitzer</artifactId> 
     <version>1.0.10</version> 
    </dependency> 
    <!-- Hibernate library --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.9.Final</version> 
    </dependency> 
    <!-- MySQL driver connector library --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.35</version> 
    </dependency> 
    <!-- Spring ORM --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 
    <!-- Spring Web --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.1.6.RELEASE</version> 
    </dependency> 
</dependencies> 
</project> 

Основной класс:

package com.test; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 

import com.hibernate.data.Person; 

public class Main { 
    public static void main(String [] args){ 
     Configuration configuration = new Configuration(); 
     System.out.println("CFG and hbm files loaded successfully.");//just to test 

     configuration.configure("hibernate.cfg.xml"); 

     SessionFactory factory = configuration.buildSessionFactory(new StandardServiceRegistryBuilder().configure().build()); 

     Session session = factory.openSession(); 

     Transaction tx = session.getTransaction(); 
     tx.begin(); 
     System.out.println("Transaction began");//just to test 

     Person newPerson = new Person(); 
     newPerson.setFirstName("aa"); 
     newPerson.setLastName("bbb"); 
     newPerson.setGender("Male"); 
     newPerson.setAge(2); 

     session.save(newPerson); 
     session.flush(); 

     tx.commit(); 
     session.close(); 
     System.out.println("Session closed");//just to test 
    } 

} 

Есть дополнительный шаг для достижения этого подключения к базе данных?

Или какая у меня ошибка?

Спасибо за любую помощь ..

+0

Какой ошибки вы получаете? Можете ли вы показать нам? – rakeeee

+0

Нет никакого класса error.main, как и ожидалось. Кроме того, я добавил некоторые основные строки System.out.println в основной класс, чтобы проверить, работает ли он. Все кажется нормальным. – oddly

+0

Что эти sysouts показывают вам? –

ответ

0

Возможно ваша сессия не получает покраснел; может быть сбой в вашей конфигурации. Это случается много раз для экземпляра, если вы настроили OpenSessionInView Filter, он изменяет режим очистки по умолчанию вашей конфигурации. В DAO слое проверить flushMode session.getFlushMode() режим промывки не должно быть NEVER или MANUAL

Если сессия не получает покраснела, вы дб не будет обновляться. Вы должны вручную очистить сессию после операции по session.flush()

Также в в конфигурационном файле просто изменить свойство истинных от ложной & проверки <property name="connection.autocommit">true</property>

+0

спасибо за ответ. Но у меня уже есть session.flush() в main.i также добавлен мой основной класс. Вы можете посмотреть на него? – oddly

+0

Ваш код выглядит хорошо для меня. Просто проверьте sql, сгенерированный в консоли. – underdog

+0

Также в файле конфигурации просто измените свойство на true с false & check true underdog

Смежные вопросы