顯示具有 Hibernate 標籤的文章。 顯示所有文章
顯示具有 Hibernate 標籤的文章。 顯示所有文章

2010年7月7日 星期三

[Hibernate] 使用hibernate會使用到的jar檔

hibernate-distribution-3.5.3-Final  require lib
antlr-2.7.6.jar
c3po-0.9.1.2.jar
cglib-2.2.jar
commons-collections-3.1.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
slf4j-api-1.6.0.jar
slf4j-jcl-1.6.0.jar

有用到ehcach才使用ehcach
有用到c3po才使用c3po

[Hibernate] 使用hibernate會遇到的slf4j錯誤

at org.slf4j.impl.JCLLoggerAdapter.(JCLLoggerAdapter.java:49)
at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:70)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
at org.hibernate.cfg.Configuration.(Configuration.java:151)
at com.xxxxxx.SessionFactory(自訂的SessionFactory).(SessionFactory.java:xxx)

解決方法是更新"slf4j-jcl.jar"

http://www.slf4j.org/codes.html#jclDelegationLoop

2009年2月10日 星期二

[Java] Hibernate Query用法

Query query = hsession.createQuery("from abc where sn = :sn");
query.setString("sn", sn);

abc abc = (abc)query.uniqueResult();

query.uniqueResult(); 用Hibernate中取得一筆資料,限制是選出的資料只有一筆

2008年6月29日 星期日

[Hibernate] hibernate one-to-many mapping

資料表
Parent{
column:id,name
PK:id
}
Child{
column:id,name,ref_parent_id
PK:id
FK:ref_parent_id
}


DAO資料模型
package eg;
public class Parent{
private Integer Id;
private String Name;
private Set Children;
/*
getter and setter 省略
*/
}


package eg;
public class Child{
private Integer Id;
private String Name;
private Parent RefParent;
/*
getter and setter 省略
*/
}

hibernte mapping檔案
Parent.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="Parent" table="Parent">
<id column="id" name="Id" type="integer">
<generator class="native">
</id>
<property column="name" length="50"
name="Name" type="string"/>
<set cascade="all" inverse="true" name="Children">
<key column="ref_parent_id"><!--重要:Children的FK而不是PK-->
<one-to-many class="Child">
</set>
</class>
</hibernate-mapping>
}


Child.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="Child" table="Child">
<id column="id" name="Id" type="integer">
<generator class="native">
</id>
<property column="name" generated="never" length="50"
name="Name" type="string"/>
<many-to-one class="Parent" column="ref_parent_id" name="RefParent" null="true">
</class>
</hibernate-mapping>
}

實際操作
取得Parnet List,連帶取得Child的Set

//open session lazy=true
Query query = null;
Session hsession = null;
List<Parent> list=null;
int i=0;
query=hsession.createQuery("FROM Parent");//
query.setFirstResult(0);
query.setMaxResults(5);//取5筆
list=query.list();
for(i=0;i<list.size();i++){
out.println("Parent 有 "+list.get(i).getChildren().size()+"個Child");
}
//close session

//取得指定Parent,關閉session,再取得Parent的Children
//open session lazy=true 延遲讀取
Query query = null;
Session hsession = null;
List<Parent> list=null;
int i=0,n=1;
query=hsession.createQuery("FROM Parent p WHERE p.Id=:id");
query.setInteger("id",n);
Parent p =(Parent)query.uniqueResult();
Hibernate.initialize(p.getChildren());
//close session
out.println("Parent 有 "+p.getChildren().size()+"個Child");

[Hibernate] hibernate one-to-one mapping

資料表
ObjA{
column:id,name
PK:id
}


ObjB{
column:ref_obja_id,name
PK:ref_obja_id
FK:ref_obja_id
}


DAO資料模型
package eg;
public class ObjA{
private Integer Id;
private String Name;
private ObjB ObjB;
/*
getter and setter 省略
*/
}


package eg;
public class ObjB{
private Integer RefObjAId;
private String Name;
private ObjA RefObjA;
/*
getter and setter 省略
*/
}



hibernte mapping檔案
ObjA.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="ObjA" table="ObjA">
<id column="id" name="Id" type="integer">
<generator class="native">
</id>
<property column="name" length="50"
name="Name" type="string"/>
<one-to-one name="ObjB"
class="ObjB"
cascade="all"
/>
</class>
</hibernate-mapping>
}


ObjB.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="ObjB" table="ObjB">
<id column="ref_obja_id" name="RefObjAId" type="integer">
<generator class="foreign">
<param name="property">RefObjA</param>
</generator>
</id>
<property column="name" generated="never" length="50"
name="Name" type="string"/>
<one-to-one name="RefObjA"
class="ObjA"
constrained="true"
/>
</class>
</hibernate-mapping>
}

2008年6月28日 星期六

[Hibernate] hibernate DAO 資料表對應物件

public class Account {

private String apid;
private String id;
private String pw;

get和set,用eclipse可以自動產生 如下

public String getApid() {
  return apid;
}
public void setApid(String apid) {
  this.apid = apid;
}

}