Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CriteriaAPI从表中获取一组联接实例_Java_Hibernate_Criteria Api - Fatal编程技术网

Java 使用CriteriaAPI从表中获取一组联接实例

Java 使用CriteriaAPI从表中获取一组联接实例,java,hibernate,criteria-api,Java,Hibernate,Criteria Api,我有一个实体打印费 还有一个外键-打印机, 那么,我如何使用CriteriaAPI,这样我就可以得到一套打印机,这些打印机都有打印费用 基本上,我有一个关于这个字段的PrintingFare类 @ManyToOne @JoinColumn(name = "printer_id", foreignKey = @ForeignKey(name = "fk_fares_ref_printer_id")) private Printer printer; 如何使用Criteria API获取一组打印机

我有一个实体打印费 还有一个外键-打印机, 那么,我如何使用CriteriaAPI,这样我就可以得到一套打印机,这些打印机都有打印费用

基本上,我有一个关于这个字段的PrintingFare类

@ManyToOne
@JoinColumn(name = "printer_id", foreignKey = @ForeignKey(name = "fk_fares_ref_printer_id"))
private Printer printer;

如何使用Criteria API获取一组打印机?

您应该为查询添加限制

  Criteria criteria = getSession().createCriteria(PrintingFare.class);
  criteria.add(Restrictions.eq("printer.id", printerId));
  List<PrintingFare> list = criteria.list();

  Criteria criteria = getSession().createCriteria(Printer.class);
  criteria.createAlias("printerFairs", "pf").add(Restrictions.in("pf.id", printerFairIds));
  List<Printer> list = criteria.list();

我尚未对此进行测试,但您可以尝试:

Criteria criteria = getSession().createCriteria(PrintingFare.class);
criteria.setProjection(Projections.distinct(Projections.property("printer"));
List<Printer> list = criteria.list();

让我知道它是否有效。可能需要对其进行调整。

如果PrinterFares是从Printer.class端映射的

Criteria criteria = getSession().createCriteria(Printer.class);
criteria.createAlias("printerFares", "pf");
criteria.add(Restrictions.isNotEmpty("pf"));
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

List<Printer> printers = criteria.list();
如果无法更改Printer.class的映射

Criteria criteria = getSession().createCriteria(Printer.class);
// create a subquery
DetachedCriteria dc = DetachedCriteria.forClass(PrinterFare.class);
dc.setProjection(Projections.property("printer.id"));
// restrict by subquery
criteria.add(Subqueries.in("id", dc);
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

List<Printer> printers = criteria.list();

这将为您提供给定打印机的打印费用列表。我想OP想要一个有一个或多个相关印刷费用的打印机列表。@JoãoMendes如果你有相关的印刷展览会列表,这很容易做到。随时发布解决方案;是的,但是这可以用一个条件查询来完成吗?@nikpon我宁愿用一个条件来完成,而不要循环result@tania尝试第二个查询,不确定它是否需要获取模式