TSSでの Rod Johnson と Gavin King のやりとり
http://www.theserverside.com/news/thread.tss?thread_id=44086#226777
ひと言で言うと、過去にはいろんないきさつがあったけど仲直りしてやっていこうよみたいな?
Joined Subclass の バルク更新
JPQLのバルク更新はポリモーフィックです。どういうことかというと、たとえば親エンティティへのDELETE操作は子エンティティへのDELETE操作でもあるのです。その結果、マッピングによってはJPQLのDELETE文がSQLでは複数のDELETE文になることがあります。
Java EE勉強会でこのことを実際に動かして示したかったのですがうまく動かなくてお見せできませんでした。でも、家に帰ってもういちど試してみるとちゃんと動きました。警告のログが出るのですが、これを例外が発生して正常に動作していないと思ってしまったようです。
次回でもいいのですが、忘れないうちにちょっと書いておきます。以下簡単なサンプルです。
続きを読むMavenでのテスト通りました。
id:koichikさん、S2Hibernate-JPAがMavenでテストが通らないというのはガセネタでした。すみません。m(_ _)m
ローカルのリポジトリ(.m2/repogitory)を一旦削除してテスト走らせたらOKでした。私の環境の問題だったようです。
S2Hiberanteでマッピングファイルの自動登録
こんな感じで考えました。
まずpersistence.xmlのproviderにorg.seasar.hibernate.jpa.S2HibernatePersistenceを指定。
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name="persistenceUnit" transaction-type="JTA"> <jta-data-source>jdbc/DataSource</jta-data-source> <provider>org.seasar.hibernate.jpa.S2HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.jndi.class" value="org.seasar.extension.j2ee.JndiContextFactory"/> <property name="hibernate.transaction.manager_lookup_class" value="org.seasar.hibernate.jpa.transaction.S2TransactionManagerLookup"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="false"/> </properties> </persistence-unit> </persistence>
次にdiconファイルでResourceAutoDetectorImplとS2HibernateConfigurationを設定。この例ではMETA-INF直下のxxxOrm.xmlを自動で読み込むようにしてみました。(Naming Conventions for Java Persistenceに従うとマッピングファイル名はxxxOrm.xmlとするのがいいらしいです。この規約一般的になるのかなぁ?)
hoge.dicon
<components> <component name="detector" class="org.seasar.framework.autodetector.impl.ResourceAutoDetectorImpl"> <initMethod name="addReferenceClass"> <arg>@org.seasar.hibernate.jpa.Employee@class</arg> </initMethod> <initMethod name="addResourceNamePattern"> <arg>"META-INF/.*Orm\\.xml"</arg> </initMethod> </component> <component class="org.seasar.hibernate.jpa.S2HibernateConfiguration"> <initMethod name="addResourceAutoDetector"> <arg>detector</arg> </initMethod> </component> </components>