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]

Reply via email to