SSH框架中使用双向关联如何处理外键(添加)

128 阅读1分钟

EG:已知表customer :user 为1:多关系

(一个user可以对应多个customer客户,一个customer只对应一个user用户)

外键在Customer表中,外键名为cust_user_id

classbean.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双向可以互相查询,两个表的类中都有外键属性,但是表中的外键还是在多方。