posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Hibernate 数据结构( 树、多对多 结构表示 )

Posted on 2008-04-26 18:30 G_G 阅读(2388) 评论(0)  编辑  收藏 所属分类: hibernatejavaGeneral

level 类:
package hbm;

import java.util.Set;

/**
 * @hibernate.class table = "level"
 * where = " visible = 0  "
 * 
@author Administrator
 *
 
*/
public class Level {
    
private long id ;
    
private String name ;
    
private Level father ;
    
private Set<Level> childSet ;
    
private Set<Level> mmfathers ;
    
private Set<Level> mmchilds ;
    
    
private int visible  ;
    
    
public Level(){}
    
public Level(String name){  this.name = name ; }
    
    
public Level(String name,int visible){this.visible = visible;  this.name = name ; }
    
/**
     * @hibernate.id generator-class = "identity"
     * 
@return
     
*/
    
public long getId() {
        
return id;
    }
    
public void setId(long id) {
        
this.id = id;
    }
    
/**
     * @hibernate.property 
     * length = "20"
     * 
@return
     
*/
    
public String getName() {
        
return name;
    }
    
public void setName(String name) {
        
this.name = name;
    }
    
    
/**
     * @hibernate.many-to-one 
     * cascade = "save-update"
     * inverse = "false"
     * column = "fid"
     * 
@return
     
*/
    
public Level getFather() {
        
return father;
    }
    
public void setFather(Level father) {
        
this.father = father;
    }
    
    
/**
     * @hibernate.set 
     * lazy = "true"
     * table = "Level"
     * cascade = "save-update"
     * where = " visible = 0 "
     * @hibernate.collection-key column = "fid"
     * @hibernate.collection-one-to-many class = "hbm.Level"
     * 
@return
     
*/
    
public Set<Level> getChildSet() {
        
return childSet;
    }
    
public void setChildSet(Set<Level> childSet) {
        
this.childSet = childSet;
    }
    
    
/**
     * @hibernate.property 
     * 
@return
     
*/
    
public int getVisible() {
        
return visible;
    }
    
public void setVisible(int visible) {
        
this.visible = visible;
    }
    
    
/**
     * @hibernate.set
     *         table = "level2level_mm"
     *         lazy = "true"
     *         inverse = "false"
     *         cascade = "save-update"
     *         @hibernate.collection-key column = "mmchilds"
     *         @hibernate.collection-many-to-many 
     *             class = "hbm.Level"
     *             column = "mmfathers" 
     * 
@return
     
*/
    
public Set<Level> getMmfathers() {
        
return mmfathers;
    }
    
public void setMmfathers(Set<Level> mmfathers) {
        
this.mmfathers = mmfathers;
    }
    
    
/**
     * @hibernate.set
     *         table = "level2level_mm"
     *         lazy = "true"
     *         inverse = "false"
     *         cascade = "save-update"
     *         @hibernate.collection-key column = "mmfathers"
     *         @hibernate.collection-many-to-many 
     *             class = "hbm.Level"
     *             column = "mmchilds" 
     * 
@return
     
*/
    
public Set<Level> getMmchilds() {
        
return mmchilds;
    }
    
public void setMmchilds(Set<Level> mmchilds) {
        
this.mmchilds = mmchilds;
    }
    

}


测试类:
package test;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import hbm.Level;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Assert;
import org.junit.Test;

import unit.HibernateUtil;

public class HbnUnit {
    @Test 
//树形结构 数据添加
    public void level() throws Exception {
        Session session 
= HibernateUtil.currentSession();
        Transaction tr 
=  session.beginTransaction();
        
        Level level 
= new Level();
        level.setName(
"f1");
        
        Set
<Level> set = new HashSet<Level>();
            set.add(
new Level("c1"));
            set.add(
new Level("c2",1));
            set.add(
new Level("c3"));
            set.add(
new Level("c4",1 ));
            set.add(
new Level("c5" ));
            set.add(
new Level("c6",1 ));
        
        level.setChildSet(set);
        session.save(level);
        session.flush() ;
        session.clear();
        tr.commit();
        
    }
    
    @Test 
//树形结构 数据验证
    public void sAll() throws Exception {
        Session session 
= HibernateUtil.currentSession();
        List
<Level> list =  session.createQuery(" from Level tl where tl.father is null ").list();
        
for( Level tmp : list ){
            System.out.println( tmp.getName()
+"====="+(tmp.getVisible()==0) );
            Assert.assertTrue(
" 查出删除数据 ", tmp.getVisible()==0); 
            
            
for(  Level tt : tmp.getChildSet() ){
                Assert.assertTrue(
" 查出删除数据 ", tt.getVisible()==0); 
            }
        }
        Assert.assertTrue(
" 没有查出数据 ", list.size()>0 );
        session.clear();
    }
    
    
    
public static long l1mm =0l ;
    
public static long l2mm =0l ;
    
public static long l3mm =0l ;
    
public static long l5mm =0l ;
    
    @Test 
//多对多结构 数据添加
    public void contact() throws Exception {
        Session session 
= HibernateUtil.currentSession();
        Transaction tr 
=  session.beginTransaction();
        
        
// 1 对 2,3  / 2 对 3,4 / 5 对 1,2,3,4
        Level level1 = new Level();
        level1.setName(
"f1");
        
        Level level2 
= new Level();
        level2.setName(
"f2");
    
        Level level3 
= new Level();
        level3.setName(
"f3");
    
        Level level4 
= new Level();
        level4.setName(
"f4");
    
        Level level5 
= new Level();
        level5.setName(
"f5");
    
        level1.setMmchilds(
new HashSet<Level>());
            level1.getMmchilds().add(level2);
//2
            level1.getMmchilds().add(level3);
        
        level2.setMmchilds(
new HashSet<Level>());
        level2.setMmfathers(
new HashSet<Level>());
            level2.getMmchilds().add(level3);
//1
            level2.getMmfathers().add(level4);//1
    
        level3.setMmfathers(
new HashSet<Level>());
            level3.getMmfathers().add(level4);
//1
        
        level5.setMmchilds(
new HashSet<Level>());
            level5.getMmchilds().add(level1);
//4
            level5.getMmchilds().add(level2);
            level5.getMmchilds().add(level3);
            level5.getMmchilds().add(level4);
            
            session.save(level1);
            session.save(level2);
            session.save(level3);
            session.save(level4);
            session.save(level5);
            
        tr.commit();
        
        l1mm 
= level1.getId() ;
        l2mm 
= level2.getId() ;
        l3mm 
= level3.getId() ;
        l5mm 
= level5.getId() ;
        
        session.clear();
    }
    
    @Test 
//多对多结构 数据添加
    public void contactTest() throws Exception {
        Session session 
= HibernateUtil.currentSession();
        Level level1 
= (Level)session.get(Level.class, l1mm);
        System.out.println(
" level1 --- ");
        System.out.println( level1.getMmchilds().size() );
        System.out.println( level1.getMmfathers()
!=null?level1.getMmfathers().size():0 );
        
        
        Level level2 
= (Level)session.get(Level.class, l2mm);
        System.out.println(
" level2 --- ");
        System.out.println( level2.getMmchilds().size() );
        System.out.println( level2.getMmfathers()
!=null?level2.getMmfathers().size():0 );
        
        Level level3 
= (Level)session.get(Level.class, l3mm);
        System.out.println(
" level3 --- ");
        System.out.println( level3.getMmchilds()
!=null?level3.getMmchilds().size():0 );
        System.out.println( level3.getMmfathers()
!=null?level3.getMmfathers().size():0 );
        
        Level level5 
= (Level)session.get(Level.class, l5mm);
        System.out.println(
" level5 --- ");
        System.out.println( level5.getMmchilds().size() );
        System.out.println( level5.getMmfathers()
!=null?level5.getMmfathers().size():0 );
        
    }
    
}


hbm 配置结构:
     
    
<property name="connection.driver_class">
        org.gjt.mm.mysql.Driver
    
</property>

    
<property name="connection.username">root</property>

    
<property name="connection.url">
        
<![CDATA[
            jdbc:mysql://localhost:3306/test?characterEncoding=utf8&connectionCollation=gbk_chinese_ci
            
]]>
    
</property>

    
<property name="dialect">
        org.hibernate.dialect.MySQLInnoDBDialect
    
</property>
    
<property name="show_sql">true</property>


    
<!-- JDBC connection pool (use the built-in) -->
    
<!-- Mapping files -->
    
<mapping resource="hbm/Level.hbm.xml" />


结果:
Hibernate: insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
update level set fid=where id=?
Hibernate: 
update level set fid=where id=?
Hibernate: 
update level set fid=where id=?
Hibernate: 
update level set fid=where id=?
Hibernate: 
update level set fid=where id=?
Hibernate: 
update level set fid=where id=?
Hibernate: 
select level0_.id as id0_, level0_.name as name0_, level0_.fid as fid0_, level0_.visible as visible0_ from level level0_ where (  level0_.visible = 0 ) and (level0_.fid is null)
f1
=====true
Hibernate: 
select childset0_.fid as fid1_, childset0_.id as id1_, childset0_.id as id0_0_, childset0_.name as name0_0_, childset0_.fid as fid0_0_, childset0_.visible as visible0_0_ from level childset0_ where  (  childset0_.visible = 0 )  and childset0_.fid=?
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level (name, fid, visible) values (?, ?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
insert into level2level_mm (mmchilds, mmfathers) values (?, ?)
Hibernate: 
insert into level2level_mm (mmchilds, mmfathers) values (?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
insert into level2level_mm (mmfathers, mmchilds) values (?, ?)
Hibernate: 
select level0_.id as id0_0_, level0_.name as name0_0_, level0_.fid as fid0_0_, level0_.visible as visible0_0_ from level level0_ where level0_.id=and (  level0_.visible = 0 ) 
 level1 
--
Hibernate: select mmchilds0_.mmfathers as mmfathers0_, mmchilds0_.mmchilds as mmchilds0_ from level2level_mm mmchilds0_ where mmchilds0_.mmfathers=?
2
Hibernate: 
select mmfathers0_.mmchilds as mmchilds0_, mmfathers0_.mmfathers as mmfathers0_ from level2level_mm mmfathers0_ where mmfathers0_.mmchilds=?
1
Hibernate: 
select level0_.id as id0_0_, level0_.name as name0_0_, level0_.fid as fid0_0_, level0_.visible as visible0_0_ from level level0_ where level0_.id=and (  level0_.visible = 0 ) 
 level2 
--
Hibernate: select mmchilds0_.mmfathers as mmfathers0_, mmchilds0_.mmchilds as mmchilds0_ from level2level_mm mmchilds0_ where mmchilds0_.mmfathers=?
1
Hibernate: 
select mmfathers0_.mmchilds as mmchilds0_, mmfathers0_.mmfathers as mmfathers0_ from level2level_mm mmfathers0_ where mmfathers0_.mmchilds=?
3
Hibernate: 
select level0_.id as id0_0_, level0_.name as name0_0_, level0_.fid as fid0_0_, level0_.visible as visible0_0_ from level level0_ where level0_.id=and (  level0_.visible = 0 ) 
 level3 
--
Hibernate: select mmchilds0_.mmfathers as mmfathers0_, mmchilds0_.mmchilds as mmchilds0_ from level2level_mm mmchilds0_ where mmchilds0_.mmfathers=?
0
Hibernate: 
select mmfathers0_.mmchilds as mmchilds0_, mmfathers0_.mmfathers as mmfathers0_ from level2level_mm mmfathers0_ where mmfathers0_.mmchilds=?
4
Hibernate: 
select level0_.id as id0_0_, level0_.name as name0_0_, level0_.fid as fid0_0_, level0_.visible as visible0_0_ from level level0_ where level0_.id=and (  level0_.visible = 0 ) 
 level5 
--
Hibernate: select mmchilds0_.mmfathers as mmfathers0_, mmchilds0_.mmchilds as mmchilds0_ from level2level_mm mmchilds0_ where mmchilds0_.mmfathers=?
4
Hibernate: 
select mmfathers0_.mmchilds as mmchilds0_, mmfathers0_.mmfathers as mmfathers0_ from level2level_mm mmfathers0_ where mmfathers0_.mmchilds=?
0




只有注册用户登录后才能发表评论。


网站导航: