Not tried it before, but something like this should work:
select * from Table_A a
where a not in (
select b.a from Table_B b )
This is of course in HQL
Criteria might look like this:
DetachedCriteria subquery = DetachedCriteria.forClass(B.class)
.setProjection( Property.forName("a.ID") )
.add(Restrictions.isNotNull("a.ID"));
session.createCriteria(A.class)
.add ( Property.forName("ID").notIn(subquery) )
.list();