2013年11月21日木曜日

JPAとHibernateのCascadeTypeにハマりました。。。


Hibernateでエンティティの関連性にCascadeTypeを使うと、データ取得だけとか、更新もするとか、いろいろ指定できるはずなのですが、できない??結構ハマったのですが、いろいろと調べると参考になるサイトに、JPAとHibernateでそれぞれCascadeTypeのアノテーションがあり、HibernateのSessionを使っているとJPAのCascadeTypeでは予測した挙動で動いてくれないようです。これはハマる!!

org.hibernate.annotations.CascadeType
javax.persistence.CascadeType
は違う!!

JPA
 @OneToMany(fetch = FetchType.LAZY, 
       cascade = {CascadeType.PERSIST,CascadeType.MERGE }, 
       mappedBy = "stock")
Hibernate
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
@Cascade({CascadeType.SAVE_UPDATE})

それにしても、@OneToManyはjavax.persistenceで、@Cascadeはorg.hibernate.annotations、ややこしい。。。

http://docs.jboss.org/hibernate/core/3.5/javadocs/org/hibernate/annotations/CascadeType.html
http://docs.oracle.com/javaee/6/api/javax/persistence/CascadeType.html

0 件のコメント:

コメントを投稿