daybreaksnow's diary

私を私と呼びたい

2013-01-01から1ヶ月間の記事一覧

[Hibernate]バリュー型のコレクション

商品と商品画像のように、DBのテーブルは1:nの関係にあるが、 コード上では商品クラスは画像名のみ欲しい場合のマッピング。ItemテーブルとItemImageテーブルが外部キーitem_idで関連している場合 Item.hbm <set name=“imageNames” table=“ITEM_IMAGE”> <key column=“ITEM_ID”> <element type=“string” column=“FILE_NAME”> </set> Item.java pr…

[Hibernate]sqlRestriction使用時のエイリアス名の解決方法

sqlRestrictionでは、ルートとなるエンティティのエイリアスは{alias}で取得できるが、 joinしたエンティティのエイリアスは取得できない。例 Criteria criteria = session.createCriteria(Bid.class); criteria.createAlias("item", "aliasItem"); criteria…

[PostgreSQL]PostgresSQLの検索結果をExcelに張り付ける

PostgreeSQL用のGUI管理ツールとしてpgAdminがあるが、 pgAdmin上でselectした結果をExcelにコピペしても、1セルにすべて入ってしまう。今までは一度別ファイルに張り付けた後、Excelの外部データの取り込みで区切り文字を指定していた。 しかし、Excelに直…

[Hibernate]session.beginTransactionを複数回呼んだ場合の挙動

session.beginTransactionを呼んだ後、そのトランザクションがコミットorロールバックされる前に、もう一度beginTransactionを呼ぶと同じインスタンスが返される。そのため、以下のようなコードはエラーとなる。 private void saveItem(Session session) { T…

[Eclipse]デバッグ中に任意の式を実行する

Eclipse 4.2ブレークポイントで止まる→右クリック→表示(Display)→Ctrl+Shift+D→表示タブに式を記述→式を選択して右クリック→実行(Execute)また、表示タブの右クリックから強制リターン(Force Return)を選択すると、選択した式の実行結果で、returnすることが…

[Hibernate]パラダイムミスマッチ・関連の問題

Javaのクラス図 DBのER図 商品は複数のカテゴリに属し、カテゴリには複数の商品が存在する。 これは多対多関連となる。これをRDB上で実現するためには、商品とカテゴリのマッピングをする中間テーブルを使うことになる。 Java上で中間テーブルクラスを作らず…

[Hibernate]パラダイムミスマッチ・継承の問題の対応(1テーブルで管理する場合)

Javaのクラス図 DBのER図 DB上は請求を一つのテーブルにしたいとする。(joinが重いから)この場合のマッピングは、以下のようにdiscriminatorとsubclassを利用して実現できる。 ・Billing.hbm.xml <discriminator type="string"> <column name="billing_details_type"></column> </discriminator> <property name="text" /> <property name="amount" /> </property></property>

[Hibernate]パラダイムミスマッチ・粒度の問題の対応

Javaのクラス図 DBのER図 DB上はUserとAddressの二つのテーブルに分けたくないとする。(joinが重いから)この場合のマッピングは、以下のようにcomponentを利用して実現できる。・User.hbm.xml <component name="homeAddress" class="hoge.package.Address"> <property name="zip_code" column="home_zip_code"></property> <property name="city" column="home_city"></property> </component>

[Hibernate]外部キーカラムの保存方法

自動生成のデフォルトで生成される多対一関連のhbmは以下のようになっている。 <many-to-one name="item" class="sample.Item" fetch="select" cascade="save-update"> <column name="item_id" /> </many-to-one> この場合、itemフィールドにItemオブジェクトをセットし、保存すると、自動的にそのItemのIDがitem_idカラムに保存される。しかし、毎回Itemオブジェクトをロードしてセット…

[SQL Server]SQL Serverの連鎖更新

SQL Server 2008外部キー制約がついているカラムを変更したい場合は、cascadeを有効にすると、関連先のカラムも同時に変更できる。例 ALTER TABLE bid ADD CONSTRAINT bid_user_fk FOREIGN KEY(user_code) REFERENCES user (user_code) ON UPDATE CASCADE ON…

[Hibernate]フェッチの設定

Root→Sub1→Sub2のように関連がある場合、関連するエンティティはデフォルトでは全て遅延フェッチされる(実際にアクセスされるまでSQLが発行されない)hbmでfetch="join"を設定することで、常に同時にselectすることができる。 <set name="fetchSub1s" table="fetch_sub1" inverse="true" fetch="join"> <key> <column name="root_id" not-null="true" /> </key> <one-to-many class="fetch.FetchSub1" /> </set> 常に…

[Hibernate]バリュー型のコレクションのマッピング

Hibernate In Action 6.2DBのテーブル構成を意識せずエンティティの関連を取る例: 商品に複数の画像が紐付いていて、必要な情報は画像のファイル名のみ。 Item→ItemImageが1対多の関係。 DB上はItemImageがitem_idで関連を保持している。Item.java /** Item…

[Hibernate]カスタムマッピング型の設定

Hibernate In Action 6.1.2DBのテーブルとエンティティのフィールドに差異がある場合のマッピング例:DBのテーブルにはcurrencyがないが、エンティティにはcurrencyとamountがある。DBにはamountがUSDとして保存される ・エンティティの金額定義 // Monetary…

[Hibernate]session.loadとgetの違い

Hibernate In Action 4.4.1 ・存在しないエンティティを読み込んだ場合 load:例外が発生する get:nullが返る ・プロキシが利用されるかどうか load:Proxyクラスが返され、実際に利用されるタイミングでselectが走る get:常に実体クラスが返る ----- Category…

[Hibernate]DBスキーマからhbm,POJOの自動生成

Eclipseプラグインのhibernate-toolsを以下からインストールhttp://download.jboss.org/jbosstools/updates/stable/juno/ テーブル追加 create table BID( bid_id bigint not null, amount bigint, item_id bigint, user_id bigint, created_date date ); cr…

Hibernate触る

環境 hibernate-3.5.2http://sourceforge.jp/projects/sfnet_hibernate/downloads/hibernate3/3.5.2-Final/hibernate-distribution-3.5.2-Final-dist.zip/ postgreSQL9.1JDBCドライバ:http://jdbc.postgresql.org/download.html hibernate-3.5.2-Final-dist…

[Hibernate]JDBCConnectionExceptionへの対応

hibernateを使ってSQL Serverへ接続を行う際、毎朝実行されるジョブで以下の例外が発生することがあった。 ・org.hibernate.exception.JDBCConnectionException: could not execute query -Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Rea…

便利リンク集(随時追加)

正規表現を視覚化 http://www.regexper.com/

github for WindowsとEGitの導入

だいぶ前にgit hubに登録した後、OSをクリーンインストールしてしまっていたので環境再構築を試みる。 エクスプローラ統合型は嫌なので、以下のアプリをとりあえずインストール。 Github for Windows(http://windows.github.com/) Eclipseには入れた覚えのな…