Did you solve this issue?
On 2/13/07, Jarek Gilewski <[EMAIL PROTECTED]> wrote:
Hello
I have a question about Hibernate's Query by Example API. I know it is not
realy connected with AppFusse but meaby sombody have the same problem and
has solved it.
I have a class Project and ProjectUsers which looks like:
Project ---has-0-or-more --> ProjectUsers
public class Project extends BaseObject {
private Long id;
private String symbol;
private String name;
private Set projectUsers = new HashSet();
...
/**
* @return Returns the project users.
*
* @hibernate.set name="project_user" lazy="false" cascade="none"
inverse="true"
* @hibernate.key column="project_id"
* @hibernate.one-to-many class="pl.unizeto.unitrack.model.ProjectUser"
*/
public Set getProjectUsers() {
return projectUsers;
}
public void setProjectUsers(Set projectUsers) {
this.projectUsers = projectUsers;
}
...
}
public class ProjectUser extends BaseObject {
private Long id;
private Project project = new Project();
private Long projectId;
private User user = new User();
private Long userId;
private boolean projectManager;
...
/**
* @hibernate.many-to-one insert="false" update="false" cascade="none"
lazy="false"
* column="project_id" not-null="true"
*/
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project =project;
}
/**
* @hibernate.property column="project_id" not-null="true"
*/
public Long getProjectId() {
return projectId;
}
/**
* @spring.validator type="required"
*/
public void setProjectId(Long projectId) {
this.projectId = projectId;
}
/**
* @hibernate.many-to-one insert="false" update="false" cascade="none"
lazy="false"
* column="user_id" not-null="true"
*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
/**
* @hibernate.property column="user_id" not-null="true"
*/
public Long getUserId() {
return userId;
}
/**
* @spring.validator type="required"
*/
public void setUserId(Long userId) {
this.userId = userId;
}
/**
* @hibernate.property column="project_manager" type="yes_no"
*/
public boolean isProjectManager() {
return projectManager;
}
public void setProjectManager(boolean projectManager) {
this.projectManager = projectManager;
}
...
}
In ProjectDaoHibernate i have written the function:
public List getProjects(final Project project) {
if (project == null) {
return getHibernateTemplate().find("from Project");
} else {
// Use Hibernate's Query by Example API.*/
// Filter on properties set in the project
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws
HibernateException {
Example ex =
Example.create(project).ignoreCase().enableLike(MatchMode.ANYWHERE);
Criteria criteria =
session.createCriteria(Project.class).add(ex);
/* ????????????????????????
if(project.getProjectUsers() != null &&
project.getProjectUsers().size() > 0) {
Iterator iter =
project.getProjectUsers().iterator();
while(iter.hasNext()) {
ProjectUser projectUser =
(ProjectUser)iter.next();
// how to add projectUser criteria from
projectUsers set
}
}
???????????????????????? */
return criteria.list();
}
};
return (List) getHibernateTemplate().execute(callback);
}
}
Right now getProjects allow me to get projects by some simple property
criteria from Project object.
What I wnat to achieve is to get projects considering projectUsers set in
Project. For example:
1. I would like to get all projects for user tomcat (userId = 2) and only
where he is a manager of them. So i would do something like this:
Project project = new Project();
Set projectUsers = new HashSet();
ProjectUser projectUser = new ProjectUser();
projectUser.setUserId(new Long(2));
projectUser.setProjectManager(true);
projectUsers.add(projectUser);
project.setProjectUsers(projectUsers);
List projects = projectManager.getProjects(project);
2. I would like to get all projects for user admin and tomcat in this way:
Project project = new Project();
Set projectUsers = new HashSet();
ProjectUser projectUser1 = new ProjectUser();
projectUser1.setUserId(new Long(1));
projectUsers.add(projectUser1);
ProjectUser projectUser2 = new ProjectUser();
projectUser2.setUserId(new Long(2));
projectUsers.add(projectUser2);
project.setProjectUsers(projectUsers);
List projects = projectManager.getProjects(project);
What should I put in the /* ?????...?????*/ place of the getProjects?
Is there any solution to use Hibernate's Query by Example with Sets like
this
Best Regards
Jarek
--
View this message in context:
http://www.nabble.com/Hibernate%27s-Query-on-HashSet-tf3220598s2369.html#a8944265
Sent from the AppFuse - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
http://raibledesigns.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]