DropwizardにおけるHibernateでのテーブル名定義箇所
今回一番引っかかったところ。
Dropwizardに組み込まれているHibernateのテンプレートクラスは、
- 設定ファイルに接続情報を記載
- Pojoの定義
- AbstractDAOの継承
- HQLを@NamedQueryで宣言、呼び出し
- サービス登録
だが、テーブル名の定義が@Tableと@NamedQuery内の2箇所であり、
どっちを使ってるのかいまいち。
そこで実験してみました。
というより今回引っかかったのでついでにいろいろ試しただけです。
大文字小文字の区別をこんな感じでしてみました。
Dropwizardのバージョンは0.7.0です。
No | SQLテーブル名 | 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、No8はPOJOクラス名=@NamedQuery。
これらより、
@NamedQueryに出てくるPOJOクラス名を@Tableで置換しているのか?
と推測。
Dropwizard勉強中のTips②
考えてみれば当たり前なんだけど、Dropwizardはjerseyを使ってるから
調べるときもjersey(JAX-RS)で検索したほうがかかりやすい、と。
ただ、今使ってるのDropwizardは0.7。
0.8がすでに存在し、jerseyのバージョンが上がって結構変わるらしい。
HK2とか言う記述をチラッと見たけど、
とりあえず0.7で一通り完成させてから対応させるつもり。
jQuery Mobile覚書(form周り)
-
jQuery Mobileでformのpost送信したければformの属性にdata-ajax="false"を指定。
一括指定する方法もあるらしいけど、今回はこっち。
( $.mobile.ajaxFormsEnabled = false をjQuery mobile.jsの読み込み前に実行:
-
普通のformだと$.postの引数に$(form).serializeArray()を使っていたが、
jQuery Mobileはformの構造を変えるので使えない
<form><input></form>が<form><div><input></div></form>みたいに変化し、レイアウト用のdivが挟まる。
その結果inputはformの直接の子ではなくなるので反応しなくなるっぽい。
JavaのPython化?
最近、データ処理用途にPythonも使っています。
itertoolsなどの各種Generatorが非常に面白く、種類が多くて使いこなせていませんが
どれにしようかなと悩むのが楽しかったり。
で、Java8も最近やっと調べ始めたのですが、ラムダ式の他にもStreamAPIを知りました。
何というか、まんまPython。
ただStreamAPIは非常にまどろっこしい。Pythonみたいにもっと簡単に書けたら捗るんだけどなぁ。
なぜかPythonみたいにIteratorベースじゃないし。
あとはyieldが使えるとうれしいのですが。
かなり近づいてきた感がありますが、クラスの宣言の楽さやジェネリクスなどがあるから
まだJavaのほうがなじむ感じがします。
Pythonは繰り返しをスマートに書こうとすればするほど一行が伸びるので、
適度に区切るとJavaでも事足りるかな、と。
jqueryのloadのcallbackでハマる
loadで持ってきたDOM要素に対してコールバックのタイミングでjqueryのセレクタが機能しない。
下記のalert文の時点でURLの要素が何も表示されてないことより確認。
ブラウザ依存(環境はFirefox)?他は未確認。
$("#id").load("URL",null,function(){
alert(URLの要素)
URLから取得した要素に対しイベント追加
});
悔しいので
- 2行に分けて$("#id").ready(function()…にして区切ってみる
- コールバックをsetTimeoutで明示的に遅らせてみる
とかとかいろいろ試した結果、
$.get(URL,{},
function(data){
dataにイベントを追加
$("#id").html(data)
},
"html"
);
に落ち着きました。
load()はDOM操作のない情報に対して向いているという解釈でいいのかな。
load()は$.get()に対して記述が楽以外のメリットがないと使わないほうが紛れがないですね。
load()も結局パラメータなしのGETリクエストなので。
jqueryのパフォーマンスで上回るとかあるのかもしれない。