hibernate 多对一 存id就可以了

来源:互联网 发布:ps3模拟器卡顿优化 编辑:程序博客网 时间:2024/04/29 21:15

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

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这个外键)

 

 

 

原创粉丝点击