JavaEE 6 JPA 2.0をもう少し

Java EE 6やJPA 2.0なんてもう枯れた誰もが知っていて当たり前の技術になっているけど、おさらいで。
古いバージョンでも過去に紹介してなかった便利なものもたまには出していこうとは思う。


今回はJPA2.0。最新は2.1になっているけど、2.0ではメジャーバージョンが上がっただけあって結構大きい変化がありますね。重要そうなのに紹介してなかったのを書いてみる。

public フィールド対応

実は2.0からはアクセサメソッドは必須ではなくなった。

@Entity
@Access(AccessType.FIELD)
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    public Long id;
    public String name;
    public String address;
}

特別な値の加工がなければこれでいいんです。@Accessがポイントですね。

NetBeansはこのアノテーションつけても文句言ってきますが無視しましょう。

生コネクション取得

JTAつかってるならアノテーションでDataSourceを注入すればいいので別に必須というわけではない。が、アプリケーションサーバーを利用していないなどそうでない場合はなかなかややこしい上に実装依存だった。

それが単純になった。

public class Jpatest {
    public static void main(String[] args) throws SQLException {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpatestPU");
        EntityManager em = emf.createEntityManager();

        em.getTransaction().begin();
        Connection con = em.unwrap(Connection.class);

        System.out.println(con.getMetaData().getDatabaseProductName());
        
        em.getTransaction().commit();
        
        em.close();
        
        emf.close();
    }
}

トランザクション開始していないと取得できないので注意。

ほかにもJPA実装の独自のコネクション情報とか取得できるのでかなり扱いやすいものになったと思う。