EG:已知表customer :user 为1:多关系
(一个user可以对应多个customer客户,一个customer只对应一个user用户)
外键在Customer表中,外键名为cust_user_id
class | bean | .hbm.xml |
User | 添加关联属性 | 配置一对多 |
Customer | 添加关联属性 | 配置多对一 |
演示:
User中的Bean 内联代码片。
private String id;//用户id private String username;//用户名称 private String password;//用户密码 //1的方:添加关联属性 customer-外键cust_user_id-关联到user private Set customer =new HashSet(0); public Set getCustomer() { return customer; } public void setCustomer(Set customer) { this.customer = customer; } // public User(String 接收的名称) { this.接收的名称=接收的名称; } 复制代码
.hbm.xml中配置一对多:
<!-- 1的一方,设置一对多,实现双向查询 set name中的数值是与bean中设置的关联属性名一致--> <set name="customer" inverse="true"> <key> <column name="cust_user_id"/> </key> <one-to-many class="com.zero.domain.Customer" /> </set> 复制代码
演示:
Customer中的Bean 内联代码片。
private String cust_id;//客户id private String cust_name;//客户名字 // private String cust_user_id;//用户跟进客户的id // 外键处理 private User user; //接受的名称 private String 接收的名称; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String get接收的名称() { return 接收的名称; } public void setId(String 接收的名称) { this.接收的名称= 接收的名称; } 复制代码
.hbm.xml中配置一对多:
<many-to-one lazy="false" name="user" class="User" fetch="select"> <column name="cust_user_id" length="32" /> </many-to-one> 复制代码
最后在添加的页面中的input的name值应该填写: name="user.接收的名称"
就实现了双向关联处理外键问题
拓展
单向one-to-many是只能多方查询到一方,而一方查询不了关联在多方的信息。
双向many-to-many双向可以互相查询,两个表的类中都有外键属性,但是表中的外键还是在多方。