Proyecto maven con hibernate

De ChuWiki
Saltar a: navegación, buscar

Proyecto maven con Hibernate-core 3.3.1.GA

Para hacer un proyecto java con Hibernate necesitamos bajarnos varios jar. La distribución de Hibernate trae unos cuantos, pero hay otros que son necesarios y no trae. Una forma rápida de bajarnos los jar necesarios para Hibernate es crear nuestro proyecto maven y añadir en el fichero pom.xml la dependencia de hibernate y de las demás cosas necesarias.

En nuestro pom.xml debemos añadir las siguientes dependencias:

  • hibernate-core, el núcleo de hibernate.
  • mysql-connector-java o el conector de la base de datos que vayamos a usar. MySQL en este caso.
  • slf4j-log4j12 o una implementación de slf4j para nuestro logger favorito. En este caso, log4j.
  • javassist una cosa que necesita Hibernate y que no viene con él si ponemos Hibernate en un proyecto Maven.

Con todo esto, las dependencias en nuestro pom.xml quedarían así

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-core</artifactId>
	<version>3.3.1.GA</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.6</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.5.2</version>
</dependency>
<dependency>
	<groupId>javassist</groupId>
	<artifactId>javassist</artifactId>
	<version>3.4.GA</version>
	<scope>compile</scope>
</dependency>

Es importante hacer coincidir la versión slf4j-log4j12 con la versión de slf4j-api de la que depende hibernate. Esta versión no queda más remedio que obtenerla por ensayo y error. Primero ponemos la dependencia de hibernate y luego, con mvn dependency:tree podemos ver la versión de slf4j-api. Puedes ver que tanto para slf4j-api como para slf4j-log4j se ha elegido la versión 1.5.2

$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building ejemplo-hibernate
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree]
[INFO] com.chuidiang.ejemplos:ejemplo-hibernate:jar:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] +- org.hibernate:hibernate-core:jar:3.3.1.GA:compile
[INFO] |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- javax.transaction:jta:jar:1.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.5.2:compile
[INFO] +- mysql:mysql-connector-java:jar:5.1.6:compile
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.5.2:compile
[INFO] |  \- log4j:log4j:jar:1.2.14:compile
[INFO] \- javassist:javassist:jar:3.4.GA:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8 seconds
[INFO] Finished at: Mon Feb 09 21:08:29 CET 2009
[INFO] Final Memory: 9M/19M
[INFO] ------------------------------------------------------------------------

Una vez creado nuestro proyecto, con mvn eclipse:eclipse nos bajará las dependencias de internet y creará nuestro proyecto eclipse. Sólo debemos abrir eclipse e importar el proyecto java recién creado, con todas sus dependencias.

Aquí puedes ver el pom.xml completo del Ejemplo sencillo con Hibernate.


Proyecto maven con Hibernate-core 4.1.4.Final

En esta nueva versión de Hibernate, han cambiado algo las dependencias, por lo que en nuestro pom.xml queda más sencillo

	<dependencies>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.1.4.Final</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<version>1.3.167</version>
		</dependency>
	</dependencies>

Vemos que solo es necesaria la versión de Hibernate-core y el del driver de la base de datos que queramos usar (H2 en este caso). El motivo es que según vemos con el comando mvn dependency:tree, Hibernate-core ya trae dependencias de todo lo que necesita

[INFO] [dependency:tree]
[INFO] com.chuidiang.ejemplos:EjemplosHibernate:jar:1.0-SNAPSHOT
[INFO] +- org.hibernate:hibernate-core:jar:4.1.4.Final:compile
[INFO] |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile
[INFO] |  +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.0.Final:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile
[INFO] |  +- org.javassist:javassist:jar:3.15.0-GA:compile
[INFO] |  \- org.hibernate.common:hibernate-commons-annotations:jar:4.0.1.Final:compile
[INFO] \- com.h2database:h2:jar:1.3.167:compile

depende de un jboss-logging, por lo que no parece necesitar ahora slf4j y ya trae la dependencia de javassist, por lo que no teneoms que ponerla aparte.

Proyecto maven con Hibernate-annotations

Si queremos hacer un proyecto java con Hibernate-annotations, las depdencias que debemos poner en el fichero pom.xml son las siguientes:

  • hibernate-annotations
  • mysql-connector-java o el conector de la base de datos que vayamos a usar. MySQL en este caso.
  • slf4j-log4j12 o una implementación de slf4j para nuestro logger favorito. En este caso, log4j.
  • javassist una cosa que necesita Hibernate y que no viene con él si ponemos Hibernate en un proyecto Maven.

y en el pom.xml pondríamos

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-annotations</artifactId>
   <version>3.4.0.GA</version>
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.6</version>
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.5.2</version>
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>javassist</groupId>
   <artifactId>javassist</artifactId>
   <version>3.4.GA</version>
   <scope>compile</scope>
</dependency>

Como indicamos en el punto anterior, es importante hacer coincidir la versión de la implementación slf4j-log4j12 (versión 1.5.2 en el ejemplo) con la de slf4j-api que viene dentro de hibernate-annotation.

Aquí puedes ver el pom.xml completo del Ejemplo sencillo con Hibernate-annotations