在做一个有关联关系的User,Department两个对象的查询时,出了点问题。
这两个对象是many-to-one关系,先贴两个对象的实体类代码。
Department.java
@OneToMany(cascade =
{ CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH }, fetch = FetchType.LAZY, mappedBy = "department")
public Set<User> getUsers()
{
return users;
}
User.java
@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, optional = false)
@JoinColumn(name = "depa_Id")
public Department getDepartment()
{
return department;
}
情况是一个界面 左边是个Department的树,右边是两个tabpanel:点击树节点更改两个tabpanel里的内容两个tabpanel分别是user,department。贴出JavaScript的激发事件代码;
function activate_view_cp(_obj){ if(_obj.getId()=='child-tab1'){ if(parentId == null) { document.getElementById('center_iframe').src="./department.action"; } else { document.getElementById('center_iframe').src="./department.action?filter_EQL_parent_Id="+parentId; } }else if(_obj.getId()=='child-tab2'){ if(parentId == null) { document.getElementById('center_iframe').src="./user.action"; } else { document.getElementById('center_iframe').src="./user.action?filter_EQL_department.id="+parentId; } } }
点击部门的tabPanel时候的uri是: ./department.action?filter_EQL_parent_Id="+parentId 。用户的tabPanel的uri是:./user.action?filter_EQL_department.id="+parentId 。注意这个地方department.id 实体属性对象的id !filter支持这样 让我太惊讶了 呵呵。省了好多事。
我刚开始的时候写成这样:./user.action?filter_EQL_depa_Id="+parentId 一直报找不到属性错误。
我用的是springside3.1.4版本本来他的filter查询是没有EQL,EQLI等。是我后来加的。其实也很简单只需要在两个类里修改一点代码就可以了
在 org.springside.modules.orm.PropertyFilter里增加定义。
在org.springside.modules.orm.hibernate.HibernateDao的buildPropertyFilterCriterion(final String propertyName, final Object value, final MatchType matchType)方法里增加处理就行了。ok