如果一的一方inverse=false,多得一方inverse=true,即一的一方没有放弃维护一对多关系的权利,多的一方放弃了,即,如果(假设x为一的一方对象,y为多的一方对象),x中有y的集合set<y>,然后集合里面每个y的对象还带了yid,则save(x)的时候hibernate就会帮我们把那些y
的对应的表的记录yid对应的记录上的外键添上xid以此来维护x、y之间的联系,这个时候,一的一方x来维护关系,如果x被删除了,或者主键变化了,则相对应的y的外键会清空和置为null;
而x那里inverse=true,y那里默认inverse=false,由多的一方来维护关系,即,当y更换关联的对象时,把外键换成另外一个,也不会影响x里面的数据,
所以,我们一般由多的一方来维护一对多的关系,一的一方经常就是inverse=ture
例如:
package com.lxl.bos.service.impl;
import java.util.HashSet;
import java.util.Set;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.lxl.bos.dao.dao.IDecidedzoneDao;
import com.lxl.bos.dao.dao.ISubareaDao;
import com.lxl.bos.domain.Decidedzone;
import com.lxl.bos.domain.Subarea;
import com.lxl.bos.service.IDecidedzoneService;
@Service
@Transactional
public class DecidedzoneServiceImpl implements IDecidedzoneService {
//注入Dao
@Autowired
private IDecidedzoneDao decidedzoneDaoImpl;
private ISubareaDao subareaDaoImpl;
@Override
public void save(String[] subareaid,Decidedzone model) {
// TODO Auto-generated method stub
//先把一的一方存进数据库
decidedzoneDaoImpl.save(model);
for(String subarea:subareaid)
{
Subarea subarea2=subareaDaoImpl.findById(subarea);
//因为这里的一的一方放弃了维护外键关联的权利,所以这里就算是save了,subarea里面的外键也不会改变
//model.getSubareas().add(subarea2);
//用多的一方存储一的一方的对象来建立关联关系和外键(此时的subarea2是持久态的,所以hibernate会根据快照机制把外键更新到数据库)
subarea2.setDecidedzone(model);
}
}
}
import com.lxl.bos.dao.dao.ISubareaDao;
import com.lxl.bos.domain.Decidedzone;
import com.lxl.bos.domain.Subarea;
import com.lxl.bos.service.IDecidedzoneService;
@Service
@Transactional
public class DecidedzoneServiceImpl implements IDecidedzoneService {
//注入Dao
@Autowired
private IDecidedzoneDao decidedzoneDaoImpl;
private ISubareaDao subareaDaoImpl;
@Override
public void save(String[] subareaid,Decidedzone model) {
// TODO Auto-generated method stub
//先把一的一方存进数据库
decidedzoneDaoImpl.save(model);
for(String subarea:subareaid)
{
Subarea subarea2=subareaDaoImpl.findById(subarea);
//因为这里的一的一方放弃了维护外键关联的权利,所以这里就算是save了,subarea里面的外键也不会改变
//model.getSubareas().add(subarea2);
//用多的一方存储一的一方的对象来建立关联关系和外键(此时的subarea2是持久态的,所以hibernate会根据快照机制把外键更新到数据库)
subarea2.setDecidedzone(model);
}
}
}