hibernate 多对一 存id就可以了

比如多个客户对应一个用户

public class Company{

private SysUser sysUser;

}

在add.jsp页面

<s:form action="xxx_save">

 <s:hidden name="sysUserId"/>

</s:form>

我当时想的是

save(){

SysUser sysUser = session.get(SysUser.class,Integer.parseInt(userid.trim()));

company.setSysUser(sysUser);

session.save(company);

}

而看别人写的代码

注意保存的时候

save(){

sysUser.setId(Integer.parseInt(userid.trim()));
   company.setSysUser(sysUser);

session.save(company);

}

直接把userId set了,就可以了,然后看session.save(company);出现的sql是

Hibernate: insert into c_company (sysUserId, dispensePerson, dispenseDate) values (?, ?,  ?)

所以只要知道对象的sysUserId就可以插入了
但是要注意这是

 <many-to-one name="sysUser" class="cn.itcast.crm.domain.SysUser" lazy="false">
           <column name="ownerUser"></column>
        </many-to-one>

多对一,即有sysUserId外键的时候。

而如果是SysUser类中

<class name="SysUser" table="sys_user"> <set name="companies" inverse="true" lazy="false" cascade="all">
        <key column="sysUser_id"/>
        <one-to-many class="Company"/>
    </set>


也是只set companyId,然后存入到sysUser的company的集合里在更新,却不能执行insert语句,因为一对多sys_user表没有company的外键

	List<Company> companies = new ArrayList<Company>();
		if (companyIdsIntegers!=null && companyIdsIntegers.length!=0) {
			for(Integer companyId:companyIdsIntegers){
			Company company = new Company();
			company.setId(companyId);
			companies.add(company);
			}
		}
		Set<Company> companies2 = new HashSet<Company>(companies);
		if (sysUsers!=null && sysUsers.size()!=0) {
			for(SysUser sysUser:sysUsers){
				sysUser.setCompanies(companies2);
			}
			sysUserService.updateSysUsers(sysUsers);
		}


 

然后List<SysUser> sysUsers = query.list();的时候,

company.getSysUser()的属性是有值的(比如name等等),因为级联查询SysCompany

    <class name="cn.itcast.crm.domain.Company" table="c_company">

 <many-to-one name="sysUser" class="cn.itcast.crm.domain.SysUser" lazy="false">
           <column name="sysUserId"></column>
        </many-to-one>

...............其他省略

jdbc底层只看company.sysUser.id,而不看company.sysUser其他的属性来查询sysUser(当然table表c_company里也没其他sysUser的属性作为列存入数据库,只有sysUserId这个外键)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值