Hibernate的多对一

Hibernate的多对一关联与数据库的多对一关系不同,主要服务于对象管理。数据库的多对一是为了保持参照完整性,如文章和分类表的例子。而在代码中,Hibernate通过配置实现对象间的多对一关联,方便查询和操作。例如Message类与Category类的配置,实现了双向多对一关联,调用getMessages()即可获取关联对象,这并不依赖于数据库的外键约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一直很迷惑,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表进行了一次查询,获取了所有分类号为指定编号的元组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值