Hibernate的多对一

来源:互联网 发布:nasa直播软件 编辑:程序博客网 时间:2024/04/30 10:12

之前一直很迷惑,Hibernate的多对一和数据库表的多对一有什么关系?答案居然是没有关系。

Hibernate的多对一主要是为了便于管理数据库,主要是CIDR操作。

而数据库的多对一则是为了维持数据库的参照完整性。

两者之间没有直接的关系。


比如建立一个数据库,有文章、分类两个表

文章(文章编号,分类编号、文章内容)

分类(分类编号、分类名称)

文章表的分类编号属性参照分类表的主键,属于多对一的关系。这属于数据库的范畴,与Hibernate没有关系。


而在代码中,Hibernate的多对一配置是这样的。


Message类:

private int msg_id;

private int category_id;

private String content;

priavte Category category;

Message.hbm.xm配置l:

<many-to-one name = "category" class = "entity.Category"
        column = "category_id">
         </many-to-one>

Category类:

private int category_id;

private String Category_name;

private Set<Message> messages = new HashSet<Message>();

Category.hbm.xm配置l:

<set name = "messages" inverse = "true" cascade = "all">
            <key column = "category_id"></key>
            <one-to-many class = "entity.Message"></one-to-many>
        </set>

上面的配置实现了文章与分类的双向多对一关联,这里的关联与数据库外键参照没有一对一的关系,而是为了更好的描述两个实体之间的包含关系,使得通过一个实体可以方便的获取与其关联的对象实体。实现的时候只要调用getMessages()方法就可以了。Hibernate可能是对Message表进行了一次查询,获取了所有分类号为指定编号的元组。

0 0
原创粉丝点击