fc2ブログ

2011-12-18(Sun)

Hibernate Error(Second-level cache is not enabled for usage)

Hibernateでのエラーをメモする。

以下のセッション取得時にエラーが発生した。
(セッション取得コード)
Configuration config = new Configuration().configure();
SessionFactory sessionfactory = config.buildSessionFactory();

(エラー内容)

Second-level cache is not enabled for usage [hibernate.cache.use_second_level_cache | hibernate.cache.use_query_cache]


二次キャッシュが有効でないと起こっているようだ。
(対応)

(pom.xml)
< dependency>
< groupId>org.hibernate
< artifactId>hibernate-ehcache
< version>${hibernateVersion}
< /dependency>



(hibernate.cfg.xml)
< property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
< /property>

これでOKだ。

参考:

スポンサーサイト



2011-12-01(Thu)

hibernateでリレーションを組んでみる(1)

ParentsがOne
Childrenが複数いるのでMany
であるとすると

Parents.hbm.xmlにはone-to-many
Children.hbm.xmlはmany-to-one
のタグを追加することになる。

Entityの定義には参照用のinstance定義?として
それぞれ以下の通り追加する。


@Entity
@Table(appliesTo = "Parents")
public class Parents{
@Id
private Integer id;
private String name;
provate Integer age;
private Set childrenset; /** Childrenインスタンスはここにロードされる */

(以下、getter, setterメソッドは省略)
}

@Entity
@Table(appliesTo = "Children")
public class Children{
@Id
private Integer id;
private String position;
provate Integer age;
private Parents Parents; /** 単数なので型はParentsとなる */

 (以下、getter, setterメソッドは省略)
}


次は、hbm.xmlファイルに追加する。

< !-- Parents側(Parents.hbm.xml) -->
< set name="childrenset" sort="unsorted">
< key>
< column name="id"/>
< /key>
< one-to-many class="db.hoge.model.Parents"/>
< /set>

< !-- Children側(Children.hbm.xml) -->
< many-to-one
cascade="all" class="db.parents.model.Parents" column="id"
insert="false" lazy="false" name="parents" update="false"
/>

ChildrenからParentsを参照するならDB側のChildrenテーブルにParentsカラムを作成しておき
レコード生成時にentityをsave()しておく。

参考:
HIBERNATE イン アクション
Hibernate (開発者ノートシリーズ)

2011-11-24(Thu)

org.hibernate.MappingException: Unknown entityエラー発生

hibernateでこんなエラーが出た。


org.hibernate.MappingException: Unknown entity: db2.teamuser.model.TeamUser


エラーの原因
モデルクラスを生成したときにhibernate.cfg.xmlにマッピングしていないため。


対応
hibernate.cfg.xmlにmapping classを追加する。

< hibernate-configuration>
< session-factory name="java:comp/env/hibernate/SessionFactory">
< property name= -------------- />
---- ---- ---- ----
< mapping class="xxx" package="yyyy" resource="hogemodel.hbm.xml" />
< /session-factory>
< /hibernate-configuration>


参考:
はじめてのJavaフレームワーク―Struts 2/Spring/Hibernate対応 (TECHNICAL MASTER)
hibernate

2011-10-01(Sat)

HibernateでCriteriaを使ってみた

こんな感じで。
クエリー実行結果(resultList)にはPersonクラスのEntityがリスト型で既に入っていた。
めちゃ簡単だ。


public List getList(
Class clz,
String name,
String offset,
String limit
) {
SessionFactory sessionfactory = = new Configuration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();

List resultList = null;
try{
resultList = session.createCriteria(Person.class)
.add(Restrictions.eq("name", name))
.setFirstResult(offset)
.setMaxResults(limit)
.list();
}catch (Throwable ex) {
throw new HibernateException("Error",ex);
}
return resultList;
}

次はHQLでも使ってどっちが楽か比べてみよう。


2011-09-26(Mon)

HibernateのPrimary KeyはStringを指定するとError!?

今、Hibernate 3.6.7.Finalを使ってPostgreSQLとコネクションしている。
Primary KeyはUnique なString idを指定してみた。
すると、こんなエラーが出た。

org.hibernate.id.IdentifierGenerationException: Unknown integral data
type for ids : java.lang.String

いろいろググってここを参照すると、

「a sequence generator was used with a string id ... and it 's very bad !」
だそうだ。
たしかにPrimary KeyをIntegerに変更したら動いた。。。
そこはStringでもなんとかしてほしいところ。



プロフィール

kumagonjp2

Author:kumagonjp2
Python,Django,R,Mongo,MySQL,Struts,Spring,データマイニングなどサーバー関係のメモを残していきます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
雪が3Dで降るブログパーツ ver2

マウスで見る方向変えられます

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR