您的位置:首页 > 其它

hibernate基础_5

2005-05-17 10:45 411 查看
这次放上的是三个映射:list,map,set
之所以把这三个映射放在同一篇里,是因为它们有很多相同点。比如,它们的类中都有相应的字段来存储多于一个的同类信息;它们的描述符中类似字段的描述相近;用来存储的table都是分为两个等……
好,下面详细介绍各个映射的方法
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的主键相联系。

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>

这里就不再详述了。

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(*)就可以了。存储当然也是采取联级,为几种映射的默认存储方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息