@ManyToOne和@OneToMany的用法的自我小结

在项目中写权限的那几样东西,留着做记录吧


1.模块管理

自关联的表,有个根模块,下面可以加子模块,主要用来做左侧菜单的,关键的地方的代码

@Entity
@Table(name = "partenr_model", schema = "dbo")
public class Model {

@ManyToOne
@JoinColumn(name = "parent_id")
private Model parent;

// 因为 easyui 树插件孩纸字段需要这么写
@OneToMany(mappedBy = "parent", orphanRemoval = true, cascade = CascadeType.ALL)
private List children = new ArrayList();
}
// 模块的操作权限
@OneToMany(mappedBy = "model", orphanRemoval = true, cascade = CascadeType.ALL)
private List permissions = new ArrayList();
@JoinColun 写在many 的一方 name 属性是 关联的外健,当然数据库表的话外健是要建立的

@ManyToOne 这个注解里面 可以 写 懒加载的一些东西 和CascadeType,说到懒加载的话,遇到了个问题

就是 开启懒加载 需要在 web.xml 文件里面加过滤器


		openSession
		com.wl.cn.filter.OpenSessionFilter
	
	
		openSession
		/*
	

然后这个是过滤器的类,继承自org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

public class OpenSessionFilter extends OpenSessionInViewFilter {

	@Override
	protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
		/*Session session = SessionFactoryUtils.getSession(sessionFactory, true);
		session.setFlushMode(FlushMode.COMMIT);
		return session;*/
		return super.getSession(sessionFactory);
	}

	@Override
	protected void closeSession(Session session, SessionFactory sessionFactory) {
		//session.flush();
		super.closeSession(session, sessionFactory);
	}

}

遇到的问题是  , 前台的 框架是 easyui 然后 , 我查询到的 list 就直接转的 josnArray

@RequestMapping("loadModelTree")
	@ResponseBody
	public JSONArray loadModelTree() {
		List list = modelService.findAll();
		String json = JSON.toJSONString(list);
		JSONArray arry = JSONArray.parseArray(json);
		return arry;
	}

然后因为 list 里面的对象 里面不是 有 孩子集合吗,每个 孩子list 的 的对象又有 父亲 ,这种 ,虽然都是 引用 ,但是在 直接 JSON.toJSONString 的 时候,引用也被搞成了 json字符串了, 所以 easyui 的datagride 就解析不了 ,于是我想到 那把 父亲的属性置为 null 就行了呀,然后 第一次 进方法,确实全部的数据都正常的展示了,但是第二次就加载了一条,原因是 我在 把 parent 的属性 置为 null 的时候对应 的数据的 parent_id 被修改为 null 了,最后发现是因为 在我自定义的 opensessionfilter 里面 我session.setFlushMode(FlushMode.COMMIT);然后 flush 了一下 ,flush的意思就是  把我属性的变化的东西 更新到数据库去,解决办法是 不flush就可以了,

自关联的相对要简单些,模块权限的集合 意思是 一个模块 下面 有添加呀删除的操作这种,所以是一对多的关系,在页面上


你可能感兴趣的:(spring)