SSH框架中使用双向关联如何处理外键(添加)?
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双向可以互相查询,两个表的类中都有外键属性,但是表中的外键还是在多方。