JPAとアクセッサメソッドの関係
実はこいつフィールドインジェクションだったワケ?
「リードオンリーなエンティティってどうやって作るんだろう」と思い,ミューテータなしのエンティティ作って試してみた.
@Entity public class Shohin implements Serializable { @GeneratedValue(strategy = GenerationType.AUTO) @Id private int id; private String shohinName; private int price; public Shohin() {} public Shohin(String name, int value) { shohinName = name; price = value; } public int getId() { return this.id; } public String getShohinName() { return shohinName; } public int getPrice() { return price; } }
んで,こんなコードで検索と登録してみんとす.
@PersistenceContext(unitName="hello_ds") private EntityManager em; public List getShohins() { Query q = em.createQuery("select d from Shohin d"); return q.getResultList(); } public void insert() { Shohin shohin = new Shohin("デジカメ", 500); em.persist(shohin); }
意外なことにできるんだなー,コレが.
さすがにアクセッサも無くしちゃうとJSFにバインドできないから残しとく.
アクセサメソッドがないとダメってのは,単なる思いこみだったようだ.ちなみに,非永続にしたい場合は,@Transientアノテーションを付けるといいらしい.
private String shohinName; @Transient private int price;
すごいね,JPA.
#ってナニが?