Hibernate高效处理Tree型数据
- import java.util.ArrayList;
- import java.util.List;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.Transient;
- import org.hibernate.annotations.Cache;
- import org.hibernate.annotations.CacheConcurrencyStrategy;
- @Entity
- @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
- public class MerType {
- private int id;
- private String name;
- private MerType parent;
- private List<MerType> children;
- public void addChild(MerType c){
- if(children == null){
- children = new ArrayList<MerType>();
- }
- children.add(c);
- }
- @Id
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @ManyToOne(fetch=FetchType.EAGER, targetEntity=MerType.class)
- @JoinColumn(name="P_ID")
- public MerType getParent() {
- return parent;
- }
- public void setParent(MerType parent) {
- this.parent = parent;
- //设置父节点的时候,将当前节点加入到父节点的孩子列表中
- if(parent != null){
- parent.addChild(this);
- }
- }
- @Transient
- public List<MerType> getChildren() {
- return children;
- }
- public void setChildren(List<MerType> children) {
- this.children = children;
- }
- }
数据库脚本
CREATE TABLE MERTYPE (
ID int(11) NOT NULL PRIMARY KEY,
NAME varchar(20) NOT NULL,
P_ID int(11) default NULL)
测试代码:
- SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
- Session session = sessionFactory.openSession();
- //一次取出全部节点
- Query query = session.createQuery("from MerType as m");
- List<MerType> list = query.list();
- //从一级缓存中取出根节点(根节点为1000)
- MerType root = (MerType) session.get(MerType.class, 1000);
- session.close();
- sessionFactory.close();
补充:Jsp教程,Java基础