问题
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