J'apprends l'hibernation. J'ai créé une application web simple dans laquelle j'obtiens des données d'Oracle 11g en utilisant Hibernate.Obtention de données oracle en veille prolongée
Mon fichier hibernate.cfg.xml est:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property>
<property name="hibernate.connection.username">hr</property>
<property name="hibernate.connection.password">titu</property>
<property name="hibernate.connection.pool_size">1</property>
<mapping class="Course" package="com.vaannila.course.Course.java" resource="com/vaannila/course/Course.hbm.xml"/>
</session-factory>
</hibernate-configuration>
J'ai une table de "Cours" dans la base de données, à partir que je veux obtenir des données. Pour cela, j'ai créé un fichier XML de mapping et un fichier POJO.
Course.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.vaannila.course.Course" table="COURSES">
<meta attribute="class-description">
This class contains the course details.
</meta>
<id name="courseId" column="COURSE_ID" type="integer"/>
<property name="courseName" column="COURSE_NAME" type="string" not-null="true"/>
</class>
</hibernate-mapping>
Course.java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.vaannila.course;
/**
*
* @author titu
*/
import org.hibernate.*;
public class Course {
int courseId ;
String courseName;
public Course() {}
public Course(String courseName) {
this.courseName = courseName;
}
public int getCourseId() {
return courseId;
}
public void setCourseId(int courseId) {
this.courseId = courseId;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
}
Je veux obtenir des données sur une page jsp qui est la suivante:
<%--
Document : index
Created on : Dec 9, 2011, 10:07:21 PM
Author : titu
--%>
<%@page import="com.vaannila.course.Course"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="com.vaannila.common.HibernateUtil"%>
<%@page import="org.hibernate.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
Session db_session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction= null;
Integer courseId= null;
try{
if(db_session==null)
{
out.println("This is null");
}
transaction= db_session.beginTransaction();
List courses= db_session.createQuery("from Course").list();
for(Iterator iterator= courses.iterator(); iterator.hasNext();)
{
Course course= (Course) iterator.next();
out.println(course.getCourseName());
}
transaction.commit();
}
catch(HibernateException e){
transaction.rollback();
e.printStackTrace();
}
finally{
db_session.close();
}
%>
</body>
</html>
I avoir créé une classe "HibernateUtil" pour créer un objet usine de session:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.vaannila.common;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
*
* @author titu
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static{
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch(Throwable ex)
{
System.err.println("Initial session factory creation failed " + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Lorsque j'exécute ce projet dans le serveur Tomcat, il donne une exception de pointeur nul. Quand je débogue mon projet, puis j'ai trouvé que
transaction= db_session.beginTransaction();
cette ligne en jsp me donne null. Signifie beginTransaction() renvoie null. Je ne sais pas pourquoi c'est ainsi?
S'il vous plaît me suggérer, Merci à l'avance
Êtes-vous sûr? La transaction était nulle pour commencer. Avez-vous franchi? – greyfairer