行く記憶の流れは絶えずして

戻ってこないのでメモするところ

DropwizardにおけるHibernateでのテーブル名定義箇所

今回一番引っかかったところ。

 

Dropwizardに組み込まれているHibernateのテンプレートクラスは、

  1. 設定ファイルに接続情報を記載
  2. Pojoの定義
  3. AbstractDAOの継承
  4. HQLを@NamedQueryで宣言、呼び出し
  5. サービス登録

って感じでマッピングxmlをいちいち作成しなくて便利。

だが、テーブル名の定義が@Tableと@NamedQuery内の2箇所であり、

どっちを使ってるのかいまいち。

 

そこで実験してみました。

というより今回引っかかったのでついでにいろいろ試しただけです。

 

大文字小文字の区別をこんな感じでしてみました。

Dropwizardのバージョンは0.7.0です。

NoSQLテーブル名POJOクラス名@Table@NamedQuery結果
1 BBSDATA BBSData BBSData BBSData クエリ呼び出し時にNG
MySQLSyntaxErrorException: Table 'Schema.BBSData' doesn't exist
2 BBSDATA BBSData BBSData BBSDATA Dropwizard起動時にNG
QuerySyntaxException: BBSDATA is not mapped
3 BBSDATA BBSData BBSDATA BBSData OK
4 BBSDATA BBSData BBSDATA BBSDATA Dropwizard起動時にNG
QuerySyntaxException: BBSDATA is not mapped
5 BBSDATA BBSDATA BBSData BBSData Dropwizard起動時にNG
QuerySyntaxException: BBSData is not mapped
6 BBSDATA BBSDATA BBSData BBSDATA クエリ呼び出し時にNG
MySQLSyntaxErrorException: Table 'Schema.BBSData' doesn't exist
7 BBSDATA BBSDATA BBSDATA BBSData Dropwizard起動時にNG
QuerySyntaxException: BBSData is not mapped
8 BBSDATA BBSDATA BBSDATA BBSDATA OK

 

意外だったのがPOJOのクラス名をみている?こと。

 

考察してみる。

  • No1とNo3より、SQL問い合わせは@Tableを使用してるっぽい。
  • No2、4、5、7より、"not mapped"と叱られているのは@NamedQuery。
  • また、No2、4、5、7はPOJOクラス名≠@NamedQuery。
  • 成功しているNo3、No8POJOクラス名=@NamedQuery。

 

これらより、

@NamedQueryに出てくるPOJOクラス名を@Tableで置換しているのか?

と推測。