Hibernate Criteria SubConsulta

Pessoal estou tentando criar essa consulta no hibernate usando criteria e não conseguindo:

select * from baia where numero not in (select baia from usuarios);

Estou tentando assim:

    public ArrayList<Baia> EmptyBaia(){
        DetachedCriteria subconsulta = DetachedCriteria.forClass(Usuarios.class);
        ArrayList<Baia> baia = (ArrayList<T>) this.session.createCriteria(Baia.class).add(Subqueries.notExists(subconsulta)).list();
        return baia;
    }

E esta retornando esse erro:

1. javax.servlet.ServletException: java.lang.NullPointerException 2. org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535) 3. org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433) 4. org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) 5. org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) 6. org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 7. javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 8. javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 9. org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 10. 11. root cause 12. 13. java.lang.NullPointerException 14. org.hibernate.loader.criteria.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:318) 15. org.hibernate.criterion.SubqueryExpression.toSqlString(SubqueryExpression.java:56) 16. org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334) 17. org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82) 18. org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67) 19. org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550) 20. org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 21. MZSuporte.dao.Dao.EmptyBaia(Dao.java:87) 22. action.SearchUserBaiaAction.execute(SearchUserBaiaAction.java:21) 23. org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) 24. org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) 25. org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) 26. org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 27. javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 28. javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 29. org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Oque estou fazendo de errado?? Como devo fazer???

Agradeço desde ja.

Depois de tanto procurar e de tanto errar consegui uma solução.

Fiz assim:

public ArrayList<T> EmptyBaia(){ DetachedCriteria subconsulta = DetachedCriteria.forClass(Usuarios.class).setProjection(Property.forName("baia")); ArrayList<T> baia = (ArrayList<T>) this.session.createCriteria(this.classe).add(Property.forName("numero").notIn(subconsulta)).list(); return baia; }

que faz ele retornar essa consulta:

select
    this_.numero as numero2_1_,
    this_.monitor as monitor2_1_,
    this_.pc as pc2_1_,
    this_.pto_rede as pto4_2_1_,
    this_.tamanho as tamanho2_1_,
    this_.pto_tel as pto5_2_1_,
    tamanhobai2_.id as id3_0_,
    tamanhobai2_.nome as nome3_0_ 
from
    baia this_ 
left outer join
    tamanho_baia tamanhobai2_ 
        on this_.tamanho=tamanhobai2_.id 
where
    this_.numero not in (
        select
            this0__.baia as y0_ 
        from
            usuarios this0__
    )

Espero que ajude a outros, se alguem tiver duvidas fiquem a vontade.

Abss a todos