前回のエンティティをテストします。テスト環境は、JDK SE 5 + Hibernate EntityManager + Postgres 8.1 を使ってます(JavaEE コンテナは使いません)。
NetBeansなら
テスト実行時のクラスパスは、プロジェクトプロパティで設定します。persistence.xmlがあるディレクトリ(conf)と、HibernateEMのライブラリ、JDBCをクラスパスに追加します。

あとは、テストケースのソースコードを開いて、「Shift+F6」を押すだけ。
テストパス後のPostgreSQLに生成されたテーブルは、NetBeans付属のDBエクスプローラーで確認できます。ランタイムタブから開きます。このあたりのDBまわりの環境設定は、こちらの記事も参考にしてください。

やっぱりNetBeansは、いろんな意味でラクチンです。必要なものはそろってる。
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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_1_0.xsd">
<persistence-unit name="sandboxPU"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>ProductStock</class>
<class>Product</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
↑クラスパス内のエンティティを自動で見つけるなら、false
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/sandbox"/>
<property name="hibernate.connection.driver_class"
value="org.postgresql.Driver"/>
<property name="hibernate.connection.password"
value="********"/>
<property name="hibernate.connection.username"
value="********"/>
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto"
value="create-drop"/>
↑必要なテーブルを自動で作成削除してくれる。
</properties>
</persistence-unit>
</persistence>
テストケース
public class EntityTestCase extends TestCase {
private EntityManagerFactory emf;
protected EntityManager getEM() {
return emf.createEntityManager();
}
public EntityTestCase(String testName) {
super(testName);
emf = Persistence.createEntityManagerFactory("sandboxPU");
}
}
public class ProductStockTest extends EntityTestCase {
public ProductStockTest(String testName) {
super(testName);
}
public void testCascadePersistAndFind() throws Exception{
ProductStock stock = new ProductStock();
stock.setAmount(100);
stock.setUpdatedAt(new java.util.Date());
Product product = new Product();
product.setName("美肌化粧水");
product.setProductStock(stock);
//↑ここまでは、ただのPOJO
EntityManager em = getEM();
//↓ここからEntityに変身する。
try{
em.getTransaction().begin();
em.persist(product);
em.getTransaction().commit();
} catch (Exception ex) {
em.getTransaction().rollback();
throw ex;
}
em.close();
em = getEM();
Product productFromDB= em.find(Product.class, product.getId());
assertEquals("DBからfindしたproductの検査"
,product,productFromDB);
ProductStock stockFromProduct
=productFromDB.getProductStock();
assertEquals("productからgetしたstockの検査"
,stock,stockFromProduct);
ProductStock stockFromDB= em.find(ProductStock.class
, productFromDB.getProductStock().getId());
assertEquals("DBからfindしたstockの検査"
,stock,stockFromDB);
Product productFromStock= stockFromProduct.getProduct();
assertEquals("stockからgetしたproductの検査1"
,product,productFromStock);
Product productFromStock2=stockFromDB.getProduct();
assertEquals("stockからgetしたproductの検査2"
,product,productFromStock2);
em.close();
}
}