How to retrieve all records that exists in a specific relationship?

[亡魂溺海] 提交于 2019-12-08 14:01:42

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!