daybreaksnow's diary

私を私と呼びたい

hibernate

[Hibernate]特定のバージョンでone-to-manyタグにproperty-ref属性を指定できない

参考URL Hibernate Mapping problem with unrelated collection - Stack Overflow [HHH-2862] Collection is not associated with any session exception when doing an eager fetch on a non-unique collection. - Hibernate JIRA 問題となるHibernateのバ…

[Hibernate]sqlProjection使用時はjoinしたエイリアス名を解決できない?

sqlRestricionであればルートエンティティ、子エンティティのどちらもエイリアス名を取得することができる(参考)が、sqlProjectionでは、どちらかしか取れない?以下のコードでは子エンティティの方のプロジェクションしか有効にならない。 (setProjectionは…

[Hibernate]デフォルトで用意されているResultTransformerの利用

Criteriaに対し、ResultTransformerをセットすることで、取得される結果の形式を変換することができる。デフォルトでは以下の四つがCriteriaSpecificationに用意されている。 変数名 クラス ROOT_ENTITY(デフォルト) RootEntityResultTransformer DISTINCT_R…

[Hibernate]1対1関連のマッピング

ユーザとその住所のように、実際は1対1の関連にある場合でも、ER図上では多対1関連で表現することとなる。 この状態でHibernateのリバースエンジニアリングをかけると、ユーザから住所はmany-to-one、住所からユーザはone-to-manyの関連でhbmが生成される。…

[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…

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

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

[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オブジェクトをロードしてセット…

[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…