问题
I have a class of computer and each of it can be assembled. I need to retrieve those records of Computer class that has Assembler. I've tried to use criteria but could not retrieve them.
@Entity
public class Computer{
  ....
  @OneToMany
  private Set <Assembler> assemblers;
  ....
}
@Entity    
public class Assembler{
  ...
  @OneToOne
  private User user;
  @OneToMany
  @LazyCollection(LazyCollectionOption.FALSE)
  private Set<Tools> tools;
  ....
}
@Entity
public class Tools{
   ....
   @OneToOne
   private Electronic electronic;
   @OneToOne
   private Manual manual;
}
Code
 Criteria cre = session.createCriteria(Computer.class, "computer")
                       .createAlias("computer.assembler", "assem")
 cre.add(Restrictions.not(Restrictions.eq("assem.id",null)));
 List computer = (List<Computer>) cre.list();
 System.out.println(computer.size()): << returns zero but should return 1
回答1:
Instead of using:
 cre.add(Restrictions.not(Restrictions.eq("assem.id",null)));
Try:
 cre.add(Restrictions.isNotEmpty("assemblers"));
(remove the alias)
回答2:
from Computer computer inner join computer.assemblers as assem
回答3:
List<Computer> list = session.createCriteria(Computer.class).setProjection(Projections.projectionList()
    .add(Projections.property("property.field1")).list();
来源:https://stackoverflow.com/questions/20059700/how-to-retrieve-all-records-that-exists-in-a-specific-relationship