thunderzhulei的专栏

一个在java中游泳的scjp

hibernate基础_5

这次放上的是三个映射:list,map,set

之所以把这三个映射放在同一篇里,是因为它们有很多相同点。比如,它们的类中都有相应的字段来存储多于一个的同类信息;它们的描述符中类似字段的描述相近;用来存储的table都是分为两个等……

好,下面详细介绍各个映射的方法

  1. list
    list映射持久类的形式如下

    public class UploadUser_2{
        private int id;
        private String name;
        private List files = new ArrayList();
    }

    在这里,我们使用一个table来存储user的信息,用另一个table来存储files,两个table通过user的id来联接。

    通过files,我们可以为一个user存储多个文件,当然,这是有前提的。addFiles方法是这样的

    public void addFiles(int index, String name) {
       files.add(index, name);
    }

    我们可以通过一般形式的setFiles(*)对files进行存储,也可以通过user.getFiles().addFiles(*,*)来设置files的内容。两种方法的效果是相同的,前一个方法只是增加了一个引用。

    关键的描述符来了。在UploadUser_2.hbm.xml中,有关list的内容如下

    <list name= "files" table= "uploadfile_2" >
        <key column= "user_id" />
        <index column= "idx" type= "integer" />
        <element column= "filename" type= "string" not-null= "true" />
    </list >

    相信,这段代码是很容易看明白的吧。table指明了files存储的地方。key表示该table通过user_id与user的table的主键相联系。
  2. map
    map映射持久类的形式如下

    public class UploadUser {
        private int id;
        private String name;
        private Map files = new HashMap();
    }

    其他的详细描述同list映射。但是,须注意,map里面不允许同一个key对应多个value。

    同样,我们也提供了额外的addFiles方法

    public void addFiles(String name, String des) {
        files.put(name, des);
    }

    因此,这里也有两种设置files的办法。

    相应的描述如下

    <map name= "files" table= "uploadfile" >
        <key column= "user_id" />
        <index column= "filename" type= "string" />
        <element column= "filedes" type= "string" not-null= "false" />
    </map>

    这里就不再详述了。
  3. set
    set映射持久类的形式如下

    public class UploadUser_3 {
        private int id;
        private String name;
        private Set files = new HashSet();
    }

    限于Set类的方法,我们提供的addFiles方法有别于前两个映射

    public void addFiles(String fname) {
        files.add(fname);
    }

    它只有一个参数。但是注意,相同的fname只能被存储一次,这是由Set的特性决定的

    相应的描述符内容也较前两个映射小

    <set name= "files" table= "uploadfile_3" >
        <key column= "USER_ID" />
        <element type= "string" column= "FILEDES" not-null= "true" />
    </set>

好了,到此三种映射都已经介绍完毕。客户段中,我们只要创建相应的类并调用session.save(*)就可以了。存储当然也是采取联级,为几种映射的默认存储方法。

阅读更多
个人分类: hibernate
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭