->刚才做了个例子试了一下,
->当你使用from Category c left join fetch c.childCategories as c1的时候
->childCategories里面的对象已经载入了,不需要再去写一个外联接后来想想c1其实是Collection,而不是Category了->感觉c1在hql里面不是Collection而是一个Category对象,你可以在where里面用c1.Category的属性=值 来定义查询条件的
->当你使用from Category c left join fetch c.childCategories as c1的时候
->childCategories里面的对象已经载入了,不需要再去写一个外联接后来想想c1其实是Collection,而不是Category了->感觉c1在hql里面不是Collection而是一个Category对象,你可以在where里面用c1.Category的属性=值 来定义查询条件的
解决方案 »
- weblogic 提示<BEA-000421> <Uncaught Throwable in processSockets
- 提问,如何禁止Hibernate为针对临时表的PO建表
- 配置数据源
- 请问各位高手,介绍一下J2EE应用服务器,开发一个J2EE应用服务器大概思路是什么?
- 为什么tomcat自带的jsp可以运行,但是其它的jsp就是运行不了呢?
- 如何实现客户端存储数据?
- proxool关闭的时候出现这样的异常是怎么回事呢?
- Struts的<html:select>标签错误,请高手指教
- 请问有没有自动生成facade跟value object的工具?
- 为什么使用ModelAndView但返回值是地址后页面获取不了值
- hibernate 查询问题
- 求一个struts+hibernate+spring的实际项目代码---200分
感觉好像没有别的好办法,呵呵
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ><hibernate-mapping>
<class name="com.softbrain.wangzl.hibernate.children.Father" table="father">
<id name="fatherId" column="father_id">
<generator class="increment">
</generator>
</id>
<property name="fatherName" column="name">
</property>
<set name="son" table="son" inverse="true" cascade="all" lazy="true">
<key>
<column name="fatherId">
</column>
</key>
<one-to-many class="com.softbrain.wangzl.hibernate.children.Son"></one-to-many>
</set>
</class>
</hibernate-mapping>public class Father {
private Set son = new HashSet();
private Integer fatherId;
private String fatherName = null;
/**
* @return Returns the fatherId.
*/
public Integer getFatherId() {
return fatherId;
}
/**
* @param fatherId The fatherId to set.
*/
public void setFatherId(Integer fatherId) {
this.fatherId = fatherId;
}
/**
* @return Returns the fatherName.
*/
public String getFatherName() {
return fatherName;
}
/**
* @param fatherName The fatherName to set.
*/
public void setFatherName(String fatherName) {
this.fatherName = fatherName;
}
/**
* @return Returns the son.
*/
public Set getSon() {
return son;
}
/**
* @param son The son to set.
*/
public void setSon(Set son) {
this.son = son;
}
}
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ><hibernate-mapping>
<class name="com.softbrain.wangzl.hibernate.children.Son" table="son">
<id name="sonId" column="son_id">
<generator class="increment">
</generator>
</id>
<property name="sonName" column="name">
</property>
<set name="grandson" table="grandson" inverse="true" cascade="all" lazy="true">
<key>
<column name="sonId">
</column>
</key>
<one-to-many class="com.softbrain.wangzl.hibernate.children.Grandson"></one-to-many>
</set>
<many-to-one name="father" class="com.softbrain.wangzl.hibernate.children.Father" column="fatherId">
</many-to-one>
</class>
</hibernate-mapping>public class Son {
private Set grandson = new HashSet();
private Father father = null;
/**
* @return Returns the father.
*/
public Father getFather() {
return father;
}
/**
* @param father The father to set.
*/
public void setFather(Father father) {
this.father = father;
}
private Integer sonId;
private Integer fatherId;
private String sonName = null;
/**
* @return Returns the fatherId.
*/
public Integer getFatherId() {
return fatherId;
}
/**
* @param fatherId The fatherId to set.
*/
public void setFatherId(Integer fatherId) {
this.fatherId = fatherId;
}
/**
* @return Returns the grandson.
*/
public Set getGrandson() {
return grandson;
}
/**
* @param grandson The grandson to set.
*/
public void setGrandson(Set grandson) {
this.grandson = grandson;
}
/**
* @return Returns the sonId.
*/
public Integer getSonId() {
return sonId;
}
/**
* @param sonId The sonId to set.
*/
public void setSonId(Integer sonId) {
this.sonId = sonId;
}
/**
* @return Returns the sonname.
*/
public String getSonName() {
return sonName;
}
/**
* @param sonname The sonname to set.
*/
public void setSonName(String sonName) {
this.sonName = sonName;
}
}
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ><hibernate-mapping>
<class name="com.softbrain.wangzl.hibernate.children.Grandson" table="grandson">
<id name="grandsonId" column="grand_id">
<generator class="increment">
</generator>
</id>
<property name="grandsonName">
</property>
<many-to-one name="son" class="com.softbrain.wangzl.hibernate.children.Son" column="sonId">
</many-to-one>
</class>
</hibernate-mapping>public class Grandson {
private Integer grandsonId;
private Integer sonId;
private String grandsonName = null;
private Son son = null;
/**
* @return Returns the son.
*/
public Son getSon() {
return son;
}
/**
* @param son The son to set.
*/
public void setSon(Son son) {
this.son = son;
} /**
* @return Returns the sonId.
*/
public Integer getSonId() {
return sonId;
}
/**
* @param sonId The sonId to set.
*/
public void setSonId(Integer sonId) {
this.sonId = sonId;
}
/**
* @return Returns the grandsonId.
*/
public Integer getGrandsonId() {
return grandsonId;
}
/**
* @param grandsonId The grandsonId to set.
*/
public void setGrandsonId(Integer grandsonId) {
this.grandsonId = grandsonId;
}
/**
* @return Returns the grandsonName.
*/
public String getGrandsonName() {
return grandsonName;
}
/**
* @param grandsonName The grandsonName to set.
*/
public void setGrandsonName(String grandsonName) {
this.grandsonName = grandsonName;
}
}
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.openSession();
Transaction t = session.beginTransaction();
// Father father = new Father();
// father.setFatherName("father");
//
// Son son1 = new Son();
// Son son2 = new Son();
// son1.setSonName("son1");
// son1.setFather(father);
// son2.setSonName("son2");
// son2.setFather(father);
//
// Grandson grandson1 = new Grandson();
// Grandson grandson2 = new Grandson();
// Grandson grandson3 = new Grandson();
// Grandson grandson4 = new Grandson();
//
// grandson1.setGrandsonName("grandson1");
// grandson1.setSon(son1);
// grandson2.setGrandsonName("grandson2");
// grandson2.setSon(son1);
// grandson3.setGrandsonName("grandson3");
// grandson3.setSon(son2);
// grandson4.setGrandsonName("grandson4");
// grandson4.setSon(son2);
//
// son1.getGrandson().add(grandson1);
// son1.getGrandson().add(grandson2);
// son2.getGrandson().add(grandson3);
// son2.getGrandson().add(grandson4);
//
// father.getSon().add(son1);
// father.getSon().add(son2);
//
// session.save(father);
// t.commit();
String hql = "from Father f left join fetch f.son as s left join fetch s.grandson as g";
Query query = session.createQuery(hql);
List list = query.list();
Son son = ((Son)(((Father)list.get(0)).getSon().toArray()[0]));
Grandson grandson = (Grandson) son.getGrandson().toArray()[0];
System.out.println(grandson.getGrandsonName());