Hibernate Annotationを使ってみるソース

Applicant というクラスを applicant テーブルにマッピングします。 JUnitで動作。

Applicant.java

import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * 受講申込者情報
 */
@Entity
abstract public class Applicant {

	private int userId;
	private String account;

	@Id
	public int getUserId(){ ゲッター }
	public void setUserId(int userId) { セッター }

	public String getAccount() { ゲッター }
	public void setAccount(String account) { セッター }

	/* この後多くのフィールドが続く */
}

ApplicantTest.java

import java.util.List;

import org.hibernate.Session;

public class ApplicantTest extends DBTestBase {

	// ここにマッピングするクラスを書く
	public Class<?>[] targetClasses() {
		return new Class<?>[]{ Applicant.class };
	}
	
	// テストケース
	public void testList() {
		Session session = openSession();
		
		Applicant app = (Applicant)session.load(Applicant.class, 1);
		assertNotNull(app);
		
		List applicants = session.createCriteria(Applicant.class).list();
		
		for(Applicant ap : (List<Applicant>)applicants) {
			System.out.println(ap.account);
		}
		
		assertTrue(applicants.size()>0);
	}
	
}

DBTestBase.java

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public abstract class DBTestBase extends TestCase {

	abstract protected Class<?>[] targetClasses();

	private SessionFactory sessionFactory;

	public void setUp() {
		String app = Applicant.class.getCanonicalName();
		String packageName = app.substring(0, app.lastIndexOf('.'));

		AnnotationConfiguration configuration = new AnnotationConfiguration()
				.addPackage(packageName);

		for (Class<?> clazz : targetClasses()) {
			configuration.addAnnotatedClass(clazz);
		}

		sessionFactory = configuration.configure().buildSessionFactory();

	}

	public Session openSession() {
		return sessionFactory.openSession();
	}
}


hibernate.cfg.xml

<?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>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost/データベース名</property>
        <property name="connection.username">*****</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.PostgreSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</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>

    </session-factory>

</hibernate-configuration>