diff options
-rw-r--r-- | java-hibernate/META-INF/persistence.xml | 48 | ||||
-rw-r--r-- | java-hibernate/build.xml | 104 | ||||
-rw-r--r-- | java-hibernate/cfg/annotations/hibernate.cfg.xml | 59 | ||||
-rw-r--r-- | java-hibernate/cfg/basic/Event.hbm.xml | 41 | ||||
-rw-r--r-- | java-hibernate/cfg/basic/hibernate.cfg.xml | 58 | ||||
-rw-r--r-- | java-hibernate/cfg/logback-test.xml | 14 | ||||
-rw-r--r-- | java-hibernate/src/ch/asynk/hibernate/annotations/Event.java | 83 | ||||
-rw-r--r-- | java-hibernate/src/ch/asynk/hibernate/annotations/HibernateAnnotationsTest.java | 80 | ||||
-rw-r--r-- | java-hibernate/src/ch/asynk/hibernate/basic/Event.java | 67 | ||||
-rw-r--r-- | java-hibernate/src/ch/asynk/hibernate/basic/HibernateBasicTest.java | 79 | ||||
-rw-r--r-- | java-hibernate/src/ch/asynk/hibernate/jpa/EventJPA.java | 83 | ||||
-rw-r--r-- | java-hibernate/src/ch/asynk/hibernate/jpa/HibernateJPATest.java | 73 |
12 files changed, 789 insertions, 0 deletions
diff --git a/java-hibernate/META-INF/persistence.xml b/java-hibernate/META-INF/persistence.xml new file mode 100644 index 0000000..9f9f1fd --- /dev/null +++ b/java-hibernate/META-INF/persistence.xml @@ -0,0 +1,48 @@ +<!-- + ~ Hibernate, Relational Persistence for Idiomatic Java + ~ + ~ Copyright (c) 2010, Red Hat Inc. or third-party contributors as + ~ indicated by the @author tags or express copyright attribution + ~ statements applied by the authors. All third-party contributions are + ~ distributed under license by Red Hat Inc. + ~ + ~ This copyrighted material is made available to anyone wishing to use, modify, + ~ copy, or redistribute it subject to the terms and conditions of the GNU + ~ Lesser General Public License, as published by the Free Software Foundation. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + ~ for more details. + ~ + ~ You should have received a copy of the GNU Lesser General Public License + ~ along with this distribution; if not, write to: + ~ Free Software Foundation, Inc. + ~ 51 Franklin Street, Fifth Floor + ~ Boston, MA 02110-1301 USA + --> +<persistence xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" + version="2.0"> + + <persistence-unit name="ch.asynk.hibernate.jpa"> + <description> + Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide + </description> + + <class>ch.asynk.hibernate.jpa.EventJPA</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE" /> + <property name="javax.persistence.jdbc.user" value="sa" /> + <property name="javax.persistence.jdbc.password" value="" /> + + <property name="hibernate.show_sql" value="true" /> + <property name="hibernate.hbm2ddl.auto" value="create" /> + </properties> + + </persistence-unit> + +</persistence> diff --git a/java-hibernate/build.xml b/java-hibernate/build.xml new file mode 100644 index 0000000..2a78bef --- /dev/null +++ b/java-hibernate/build.xml @@ -0,0 +1,104 @@ +<project default="all"> + <property name="JAVA_LIB_HOME" location="lib" /> + <property name="HIBERNATE_DIR" location="${JAVA_LIB_HOME}/hibernate" /> + + <property name="cfg-dir" location="cfg" /> + <property name="src-dir" location="src" /> + <property name="obj-dir" location="classes" /> + <property name="meta-dir" location="META-INF" /> + <property name="verbose" value="false" /> + + <path id="classpath.base"> + <pathelement location="${obj-dir}" /> + <pathelement location="${JAVA_LIB_HOME}/h2-1.3.161.jar" /> + <!--pathelement location="${JAVA_LIB_HOME}/logback-access-1.0.0.jar" /--> + <pathelement location="${JAVA_LIB_HOME}/logback-classic-1.0.0.jar" /> + <pathelement location="${JAVA_LIB_HOME}/logback-core-1.0.0.jar" /> + <pathelement location="${HIBERNATE_DIR}/hibernate3.jar" /> + <fileset dir="${HIBERNATE_DIR}/lib" includes="**/*.jar" /> + </path> + + <path id="classpath.run"> + <path refid="classpath.base" /> + </path> + <path id="classpath.test"> + <pathelement location="${cfg-dir}" /> + <pathelement location="${JAVA_LIB_HOME}/junit-4.10.jar" /> + <path refid="classpath.base" /> + </path> + <path id="classpath.test-basic"> + <path refid="classpath.test" /> + <pathelement location="${cfg-dir}/basic" /> + </path> + <path id="classpath.test-annotations"> + <path refid="classpath.test" /> + <pathelement location="${cfg-dir}/annotations" /> + </path> + <path id="classpath.test-jpa"> + <path refid="classpath.test" /> + </path> + + <target name="init"> + <mkdir dir="${obj-dir}" /> + </target> + + <target name="clean-compile"> + <delete verbose="${verbose}" dir="${obj-dir}" /> + </target> + + <target name="resources"> + <copy todir="${obj-dir}/META-INF"> + <fileset dir="${meta-dir}" /> + </copy> + </target> + + <target name="compile-test" depends="init,resources"> + <javac srcdir="${src-dir}" destdir="${obj-dir}" includeantruntime="false"> + <classpath refid="classpath.test" /> + <compilerarg value="-Xlint"/> + </javac> + </target> + + <target name="test-basic" depends="compile-test"> + <junit> + <classpath refid="classpath.test-basic" /> + <formatter type="brief" usefile="false" /> + <test name="ch.asynk.hibernate.basic.HibernateBasicTest" /> + </junit> + </target> + + <target name="test-annotations" depends="compile-test"> + <junit> + <classpath refid="classpath.test-annotations" /> + <formatter type="brief" usefile="false" /> + <test name="ch.asynk.hibernate.annotations.HibernateAnnotationsTest" /> + </junit> + </target> + + <target name="test-jpa" depends="compile-test"> + <junit> + <classpath refid="classpath.test-jpa" /> + <formatter type="brief" usefile="false" /> + <test name="ch.asynk.hibernate.jpa.HibernateJPATest" /> + </junit> + </target> + + <target name="test-all"> + <antcall target="test-basic"/> + <antcall target="test-annotations"/> + <antcall target="test-jpa"/> + </target> + + <target name="dist"> + <jar destfile="distrib.jar" + basedir="." + includes="build.xml,src/**,cfg/**" + excludes="" + /> + </target> + + <target name="all" depends="test-all" /> + <target name="clean" depends="clean-compile" /> +</project> + +<!-- $Id: build.xml,v 1.6 2003/07/07 19:29:01 dwight Exp $ --> diff --git a/java-hibernate/cfg/annotations/hibernate.cfg.xml b/java-hibernate/cfg/annotations/hibernate.cfg.xml new file mode 100644 index 0000000..43c0bdd --- /dev/null +++ b/java-hibernate/cfg/annotations/hibernate.cfg.xml @@ -0,0 +1,59 @@ +<?xml version='1.0' encoding='utf-8'?> +<!-- + ~ Hibernate, Relational Persistence for Idiomatic Java + ~ + ~ Copyright (c) 2010, Red Hat Inc. or third-party contributors as + ~ indicated by the @author tags or express copyright attribution + ~ statements applied by the authors. All third-party contributions are + ~ distributed under license by Red Hat Inc. + ~ + ~ This copyrighted material is made available to anyone wishing to use, modify, + ~ copy, or redistribute it subject to the terms and conditions of the GNU + ~ Lesser General Public License, as published by the Free Software Foundation. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + ~ for more details. + ~ + ~ You should have received a copy of the GNU Lesser General Public License + ~ along with this distribution; if not, write to: + ~ Free Software Foundation, Inc. + ~ 51 Franklin Street, Fifth Floor + ~ Boston, MA 02110-1301 USA + --> +<!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="connection.driver_class">org.h2.Driver</property> + <property name="connection.url">jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE</property> + <property name="connection.username">sa</property> + <property name="connection.password"></property> + + <!-- JDBC connection pool (use the built-in) --> + <property name="connection.pool_size">1</property> + + <!-- SQL dialect --> + <property name="dialect">org.hibernate.dialect.H2Dialect</property> + + <!-- Disable the second-level cache --> + <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> + + <!-- Echo all executed SQL to stdout --> + <property name="show_sql">true</property> + + <!-- Drop and re-create the database schema on startup --> + <property name="hbm2ddl.auto">create</property> + + <!-- Names the annotated entity class --> + <mapping class="ch.asynk.hibernate.annotations.Event"/> + + </session-factory> + +</hibernate-configuration> diff --git a/java-hibernate/cfg/basic/Event.hbm.xml b/java-hibernate/cfg/basic/Event.hbm.xml new file mode 100644 index 0000000..3e5fbf3 --- /dev/null +++ b/java-hibernate/cfg/basic/Event.hbm.xml @@ -0,0 +1,41 @@ +<?xml version="1.0"?> + +<!-- + ~ Hibernate, Relational Persistence for Idiomatic Java + ~ + ~ Copyright (c) 2010, Red Hat Inc. or third-party contributors as + ~ indicated by the @author tags or express copyright attribution + ~ statements applied by the authors. All third-party contributions are + ~ distributed under license by Red Hat Inc. + ~ + ~ This copyrighted material is made available to anyone wishing to use, modify, + ~ copy, or redistribute it subject to the terms and conditions of the GNU + ~ Lesser General Public License, as published by the Free Software Foundation. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + ~ for more details. + ~ + ~ You should have received a copy of the GNU Lesser General Public License + ~ along with this distribution; if not, write to: + ~ Free Software Foundation, Inc. + ~ 51 Franklin Street, Fifth Floor + ~ Boston, MA 02110-1301 USA + --> + +<!DOCTYPE hibernate-mapping PUBLIC + "-//Hibernate/Hibernate Mapping DTD 3.0//EN" + "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> + +<hibernate-mapping package="ch.asynk.hibernate.basic" auto-import="true"> + + <class name="Event" table="EVENTS"> + <id name="id" column="EVENT_ID"> + <generator class="increment"/> + </id> + <property name="date" type="timestamp" column="EVENT_DATE"/> + <property name="title"/> + </class> + +</hibernate-mapping> diff --git a/java-hibernate/cfg/basic/hibernate.cfg.xml b/java-hibernate/cfg/basic/hibernate.cfg.xml new file mode 100644 index 0000000..b407572 --- /dev/null +++ b/java-hibernate/cfg/basic/hibernate.cfg.xml @@ -0,0 +1,58 @@ +<?xml version='1.0' encoding='utf-8'?> +<!-- + ~ Hibernate, Relational Persistence for Idiomatic Java + ~ + ~ Copyright (c) 2010, Red Hat Inc. or third-party contributors as + ~ indicated by the @author tags or express copyright attribution + ~ statements applied by the authors. All third-party contributions are + ~ distributed under license by Red Hat Inc. + ~ + ~ This copyrighted material is made available to anyone wishing to use, modify, + ~ copy, or redistribute it subject to the terms and conditions of the GNU + ~ Lesser General Public License, as published by the Free Software Foundation. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + ~ for more details. + ~ + ~ You should have received a copy of the GNU Lesser General Public License + ~ along with this distribution; if not, write to: + ~ Free Software Foundation, Inc. + ~ 51 Franklin Street, Fifth Floor + ~ Boston, MA 02110-1301 USA + --> +<!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="connection.driver_class">org.h2.Driver</property> + <property name="connection.url">jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE</property> + <property name="connection.username">sa</property> + <property name="connection.password"></property> + + <!-- JDBC connection pool (use the built-in) --> + <property name="connection.pool_size">1</property> + + <!-- SQL dialect --> + <property name="dialect">org.hibernate.dialect.H2Dialect</property> + + <!-- Disable the second-level cache --> + <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> + + <!-- Echo all executed SQL to stdout --> + <property name="show_sql">true</property> + + <!-- Drop and re-create the database schema on startup --> + <property name="hbm2ddl.auto">create</property> + + <mapping resource="Event.hbm.xml"/> + + </session-factory> + +</hibernate-configuration> diff --git a/java-hibernate/cfg/logback-test.xml b/java-hibernate/cfg/logback-test.xml new file mode 100644 index 0000000..faa53b9 --- /dev/null +++ b/java-hibernate/cfg/logback-test.xml @@ -0,0 +1,14 @@ +<configuration> + + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> + </encoder> + </appender> + + <root level="error"> + <appender-ref ref="STDOUT" /> + </root> + +</configuration> diff --git a/java-hibernate/src/ch/asynk/hibernate/annotations/Event.java b/java-hibernate/src/ch/asynk/hibernate/annotations/Event.java new file mode 100644 index 0000000..ef365f6 --- /dev/null +++ b/java-hibernate/src/ch/asynk/hibernate/annotations/Event.java @@ -0,0 +1,83 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2010, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package ch.asynk.hibernate.annotations; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import org.hibernate.annotations.GenericGenerator; + +@Entity +@Table( name = "EVENTS" ) +public class Event { + private Long id; + + private String title; + private Date date; + + public Event() { + // this form used by Hibernate + } + + public Event(String title, Date date) { + // for application use, to create new events + this.title = title; + this.date = date; + } + + @Id + @GeneratedValue(generator="increment") + @GenericGenerator(name="increment", strategy = "increment") + public Long getId() { + return id; + } + + private void setId(Long id) { + this.id = id; + } + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "EVENT_DATE") + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/java-hibernate/src/ch/asynk/hibernate/annotations/HibernateAnnotationsTest.java b/java-hibernate/src/ch/asynk/hibernate/annotations/HibernateAnnotationsTest.java new file mode 100644 index 0000000..46e730a --- /dev/null +++ b/java-hibernate/src/ch/asynk/hibernate/annotations/HibernateAnnotationsTest.java @@ -0,0 +1,80 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2010, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package ch.asynk.hibernate.annotations; + +import java.util.Date; +import java.util.List; + +import junit.framework.TestCase; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +/** + * Illustrates the use of Hibernate native APIs. The code here is unchanged from the {@code basic} example, the + * only difference being the use of annotations to supply the metadata instead of Hibernate mapping files. + * + * @author Steve Ebersole + */ +public class HibernateAnnotationsTest extends TestCase { + private SessionFactory sessionFactory; + + @Override + protected void setUp() throws Exception { + // A SessionFactory is set up once for an application + sessionFactory = new Configuration() + .configure() // configures settings from hibernate.cfg.xml + .buildSessionFactory(); + } + + @Override + protected void tearDown() throws Exception { + if ( sessionFactory != null ) { + sessionFactory.close(); + } + } + + @SuppressWarnings({ "unchecked" }) + public void testBasicUsage() { + // create a couple of events... + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.save( new Event( "Our very first event!", new Date() ) ); + session.save( new Event( "A follow up event", new Date() ) ); + session.getTransaction().commit(); + session.close(); + + // now lets pull events from the database and list them + session = sessionFactory.openSession(); + session.beginTransaction(); + @SuppressWarnings("unchecked") + List<ch.asynk.hibernate.annotations.Event> result = session.createQuery( "from Event" ).list(); + for ( Event event : result ) { + System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() ); + } + session.getTransaction().commit(); + session.close(); + } +} diff --git a/java-hibernate/src/ch/asynk/hibernate/basic/Event.java b/java-hibernate/src/ch/asynk/hibernate/basic/Event.java new file mode 100644 index 0000000..8834ee9 --- /dev/null +++ b/java-hibernate/src/ch/asynk/hibernate/basic/Event.java @@ -0,0 +1,67 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2010, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package ch.asynk.hibernate.basic; + +import java.util.Date; + +public class Event { + private Long id; + + private String title; + private Date date; + + public Event() { + // this form used by Hibernate + } + + public Event(String title, Date date) { + // for application use, to create new events + this.title = title; + this.date = date; + } + + public Long getId() { + return id; + } + + private void setId(Long id) { + this.id = id; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/java-hibernate/src/ch/asynk/hibernate/basic/HibernateBasicTest.java b/java-hibernate/src/ch/asynk/hibernate/basic/HibernateBasicTest.java new file mode 100644 index 0000000..75d3fff --- /dev/null +++ b/java-hibernate/src/ch/asynk/hibernate/basic/HibernateBasicTest.java @@ -0,0 +1,79 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2010, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package ch.asynk.hibernate.basic; + +import java.util.Date; +import java.util.List; + +import junit.framework.TestCase; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +/** + * Illustrates use of Hibernate native APIs. + * + * @author Steve Ebersole + */ +public class HibernateBasicTest extends TestCase { + + private SessionFactory sessionFactory; + + @Override + protected void setUp() throws Exception { + // A SessionFactory is set up once for an application + sessionFactory = new Configuration() + .configure() + .buildSessionFactory(); + } + + @Override + protected void tearDown() throws Exception { + if ( sessionFactory != null ) { + sessionFactory.close(); + } + } + + public void testBasicUsage() { + // create a couple of events... + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.save( new Event( "Our very first event!", new Date() ) ); + session.save( new Event( "A follow up event", new Date() ) ); + session.getTransaction().commit(); + session.close(); + + // now lets pull events from the database and list them + session = sessionFactory.openSession(); + session.beginTransaction(); + @SuppressWarnings("unchecked") + List<ch.asynk.hibernate.basic.Event> result = session.createQuery( "from Event" ).list(); + for ( Event event : result ) { + System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() ); + } + session.getTransaction().commit(); + session.close(); + } +} diff --git a/java-hibernate/src/ch/asynk/hibernate/jpa/EventJPA.java b/java-hibernate/src/ch/asynk/hibernate/jpa/EventJPA.java new file mode 100644 index 0000000..3b9533d --- /dev/null +++ b/java-hibernate/src/ch/asynk/hibernate/jpa/EventJPA.java @@ -0,0 +1,83 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2010, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package ch.asynk.hibernate.jpa; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import org.hibernate.annotations.GenericGenerator; + +@Entity +@Table( name = "EVENTS" ) +public class EventJPA { + private Long id; + + private String title; + private Date date; + + public EventJPA() { + // this form used by Hibernate + } + + public EventJPA(String title, Date date) { + // for application use, to create new events + this.title = title; + this.date = date; + } + + @Id + @GeneratedValue(generator="increment") + @GenericGenerator(name="increment", strategy = "increment") + public Long getId() { + return id; + } + + private void setId(Long id) { + this.id = id; + } + + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "EVENT_DATE") + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/java-hibernate/src/ch/asynk/hibernate/jpa/HibernateJPATest.java b/java-hibernate/src/ch/asynk/hibernate/jpa/HibernateJPATest.java new file mode 100644 index 0000000..727d706 --- /dev/null +++ b/java-hibernate/src/ch/asynk/hibernate/jpa/HibernateJPATest.java @@ -0,0 +1,73 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2010, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package ch.asynk.hibernate.jpa; + +import java.util.Date; +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import junit.framework.TestCase; + +/** + * Illustrates basic use of Hibernate as a JPA provider. + * + * @author Steve Ebersole + */ +public class HibernateJPATest extends TestCase { + private EntityManagerFactory entityManagerFactory; + + @Override + protected void setUp() throws Exception { + // like discussed with regards to SessionFactory, an EntityManagerFactory is set up once for an application + // IMPORTANT: notice how the name here matches the name we gave the persistence-unit in persistence.xml! + entityManagerFactory = Persistence.createEntityManagerFactory( "ch.asynk.hibernate.jpa" ); + } + + @Override + protected void tearDown() throws Exception { + entityManagerFactory.close(); + } + + public void testBasicUsage() { + // create a couple of events... + EntityManager entityManager = entityManagerFactory.createEntityManager(); + entityManager.getTransaction().begin(); + entityManager.persist( new EventJPA( "Our very first event!", new Date() ) ); + entityManager.persist( new EventJPA( "A follow up event", new Date() ) ); + entityManager.getTransaction().commit(); + entityManager.close(); + + // now lets pull events from the database and list them + entityManager = entityManagerFactory.createEntityManager(); + entityManager.getTransaction().begin(); + List<ch.asynk.hibernate.jpa.EventJPA> result = entityManager.createQuery( "from ch.asynk.hibernate.jpa.EventJPA", ch.asynk.hibernate.jpa.EventJPA.class ).getResultList(); + for ( EventJPA event : result ) { + System.out.println( "EventJPA (" + event.getDate() + ") : " + event.getTitle() ); + } + entityManager.getTransaction().commit(); + entityManager.close(); + } +} |