hibernate
参考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のバ…
sqlRestricionであればルートエンティティ、子エンティティのどちらもエイリアス名を取得することができる(参考)が、sqlProjectionでは、どちらかしか取れない?以下のコードでは子エンティティの方のプロジェクションしか有効にならない。 (setProjectionは…
Criteriaに対し、ResultTransformerをセットすることで、取得される結果の形式を変換することができる。デフォルトでは以下の四つがCriteriaSpecificationに用意されている。 変数名 クラス ROOT_ENTITY(デフォルト) RootEntityResultTransformer DISTINCT_R…
ユーザとその住所のように、実際は1対1の関連にある場合でも、ER図上では多対1関連で表現することとなる。 この状態でHibernateのリバースエンジニアリングをかけると、ユーザから住所はmany-to-one、住所からユーザはone-to-manyの関連でhbmが生成される。…
商品と商品画像のように、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…
sqlRestrictionでは、ルートとなるエンティティのエイリアスは{alias}で取得できるが、 joinしたエンティティのエイリアスは取得できない。例 Criteria criteria = session.createCriteria(Bid.class); criteria.createAlias("item", "aliasItem"); criteria…
session.beginTransactionを呼んだ後、そのトランザクションがコミットorロールバックされる前に、もう一度beginTransactionを呼ぶと同じインスタンスが返される。そのため、以下のようなコードはエラーとなる。 private void saveItem(Session session) { T…
Javaのクラス図 DBのER図 商品は複数のカテゴリに属し、カテゴリには複数の商品が存在する。 これは多対多関連となる。これをRDB上で実現するためには、商品とカテゴリのマッピングをする中間テーブルを使うことになる。 Java上で中間テーブルクラスを作らず…
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>
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>
自動生成のデフォルトで生成される多対一関連の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オブジェクトをロードしてセット…
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 In Action 6.2DBのテーブル構成を意識せずエンティティの関連を取る例: 商品に複数の画像が紐付いていて、必要な情報は画像のファイル名のみ。 Item→ItemImageが1対多の関係。 DB上はItemImageがitem_idで関連を保持している。Item.java /** Item…
Hibernate In Action 6.1.2DBのテーブルとエンティティのフィールドに差異がある場合のマッピング例:DBのテーブルにはcurrencyがないが、エンティティにはcurrencyとamountがある。DBにはamountがUSDとして保存される ・エンティティの金額定義 // Monetary…
Hibernate In Action 4.4.1 ・存在しないエンティティを読み込んだ場合 load:例外が発生する get:nullが返る ・プロキシが利用されるかどうか load:Proxyクラスが返され、実際に利用されるタイミングでselectが走る get:常に実体クラスが返る ----- Category…
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-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を使ってSQL Serverへ接続を行う際、毎朝実行されるジョブで以下の例外が発生することがあった。 ・org.hibernate.exception.JDBCConnectionException: could not execute query -Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Rea…