本文共 2995 字,大约阅读时间需要 9 分钟。
上次我们说到了hibernate映射关系中的一对一关系,可是,我们知道,在实际应用中,我们最常遇到的还是一对多的关系。所以,今天我们来看看一对多关系的映射是怎么做到的。
//人public class Person1nfk implements Serializable { private int personid; private String name; private int age; private Set addresses=new HashSet();
//地址public class Address1nfk implements Serializable { private int addressid; private String addressdetail;
一个人(Person)对应多个地址(Address),比如家庭地址、公司地址。
解说1: inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系。
解说2: Set集合属于无序集合,映射时只需指定Set集合的key(外键列)、element(元素列),以外键列、元素列(非空)作为联合主键;元素列为空时,Set集合表没有主键。
多个人(Person)对应一个地址(Address)。
一个人(Person)对应多个地址(Address)。
解说1: inverse=true的含义: 由双向关联另一方维护该关联,己方不维护该关联(只能进行查询操作)。在上代码中,由Address1nfk_sx类这方维护该关系。
解说2: Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true。 Cascade:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。 解说3: fetch抓取策略:默认是fetch=”select”,另外发送一条select语句抓取当前对象关联实体或集合;当配置fetch=”join”,hibernate会通过select语句使用外连接来加载其关联实体或集合,此时lazy会失效
一个人(Person)对应多个地址(Address),比如家庭地址、公司地址。
多个人(Person)对应一个地址(Address)。
我们通过一对多映射关系的学习,了解了one-to-many和many-to-one的使用,那么下次我们将继续介绍many-to-many的映射关系。
转载地址:http://bymei.baihongyu.com/