RT,由相关的实例吗?请各位指点一下,做项目的时候,卡住了。
解决方案 »
- 正则表达式的问题
- 不干了,回家过年喽,给兄弟们点儿分!!
- 怎么老是报文档非法异常
- about one to many,many to one, many to many ,one to one
- 大神们 求助!!!
- [OpenJPA]数据已经保存到数据库,但find取不到数据,重启tomcat后,又可以取到
- JBoss下配置数据源的问题![高分]
- 怎样通过eclipse启动tomcat 5.0
- DynaValidatorForm验证,errors.head能够显示,但error.username.required却不能显示
- java 内如何取得一个位置矩阵的行与列?请答复,在线等待,谢
- 网上下载源代码 为什么没有.java文件
- DynaValidatorForm 如何在程序中实例化 在线等待
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;@Entity
@Table(name="catalog")
public class Catalog implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column
private String name;
@ManyToOne
@JoinColumn(name="parent_id")
private Catalog catalog;
@OneToMany(mappedBy="catalog",cascade=CascadeType.ALL)
private Set<Catalog> catalogs; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Catalog getCatalog() {
return catalog;
} public void setCatalog(Catalog catalog) {
this.catalog = catalog;
} public Set<Catalog> getCatalogs() {
return catalogs;
} public void setCatalogs(Set<Catalog> catalogs) {
this.catalogs = catalogs;
}
}
测试类:package com.choogoo.test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;import com.choogoo.pojo.Catalog;
import com.choogoo.util.HibernateSessionFactory;public class Test {
public static void main(String[] args) {
long parentid=0;
int level=0;
getALLCatalog(parentid,level); } public static void getALLCatalog(long parentid, int cataloglevel) {
String hql ="";
if (parentid==0) {
hql = "from Catalog as c where c.catalog.id is null";
} else {
hql = "from Catalog as c where c.catalog.id="+parentid;
}
Session session = null;
List list = new ArrayList();
int level=cataloglevel;
try {
session = HibernateSessionFactory.getSession();
Query q = session.createQuery(hql);
list = q.list();
level+=1;
for (int i = 0; i < list.size(); i++) {
Catalog catalog = (Catalog) list.get(i);
for (int j = 0; j < level; j++) {
System.out.print(" ");
}
System.out.println("|---"+catalog.getName());
getALLCatalog(catalog.getId(),level);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Hibernate的配置文件:<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration><session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/unlimit</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping class="com.choogoo.pojo.Catalog" />
</session-factory>
</hibernate-configuration>
由于是测试代码,没有分层写DAO,大家有需要可以拓展。
呵呵,目前网上介绍的例子很少,所以贴出来分享。希望能帮助大家。
一般的做法是一次性按parentid排序全部查询出来,这样就会按从根节点到最末的叶节点按层一层一层出来了
然后再这个排好序list的基础上再递归或者其他什么的操作,减少对数据库的访问次数
或者兄弟给个实例,让我们学习下,如何?
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;@Entity
@Table(name="catalog")
public class Catalog implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column
private String name;
@ManyToOne
@JoinColumn(name="parent_id")
private Catalog catalog;
@OneToMany(mappedBy="catalog",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private Set<Catalog> catalogs; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Catalog getCatalog() {
return catalog;
} public void setCatalog(Catalog catalog) {
this.catalog = catalog;
} public Set<Catalog> getCatalogs() {
return catalogs;
} public void setCatalogs(Set<Catalog> catalogs) {
this.catalogs = catalogs;
}
}package com.choogoo.test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;import org.hibernate.Query;
import org.hibernate.Session;import com.choogoo.pojo.Catalog;
import com.choogoo.util.HibernateSessionFactory;public class Test {
public static void main(String[] args) {
long parentid=0;
int level=0;
getALLCatalog(parentid,level); } public static void getALLCatalog(long parentid, int cataloglevel) {
String hql ="";
if (parentid==0) {
hql = "from Catalog as c where c.catalog.id is null";
} else {
hql = "from Catalog as c where c.catalog.id="+parentid;
}
Session session = null;
List list = new ArrayList();
int level=cataloglevel;
try {
session = HibernateSessionFactory.getSession();
Query q = session.createQuery(hql);
list = q.list();
for (int i = 0; i < list.size(); i++) {
Catalog catalog = (Catalog) list.get(i);
printAllCatalog(level, catalog);
}
} catch (Exception e) {
e.printStackTrace();
}
} private static void printAllCatalog(int level, Catalog catalog) {
for (int j = 0; j < level; j++) {
System.out.print(" ");
}
System.out.println("|---"+catalog.getId()+"_"+catalog.getName());
Set<Catalog> catalogs=catalog.getCatalogs();
Iterator irs = catalogs.iterator();
level+=1;
while(irs.hasNext()){
Catalog c = (Catalog)irs.next();
printAllCatalog(level, c);
}
}
}