【问题标题】:How to retrieve all records that exists in a specific relationship?如何检索存在于特定关系中的所有记录?
【发布时间】:2013-11-18 22:53:21
【问题描述】:

我有一类电脑,每一台都可以组装。我需要检索具有汇编程序的计算机类的那些记录。我尝试使用条件,但无法检索它们。

@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;

}

代码

 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

【问题讨论】:

  • 你到底尝试了什么?
  • 必须使用条件还是可以使用 HQL?
  • @Ean 没关系,我只需要检索正确的记录。
  • 这是您需要的吗? select distinct(computer) from Assembler
  • 汇编器没有计算机成员,但计算机有汇编器成员

标签: java hibernate hibernate-mapping


【解决方案1】:

而不是使用:

 cre.add(Restrictions.not(Restrictions.eq("assem.id",null)));

试试:

 cre.add(Restrictions.isNotEmpty("assemblers"));

(删除别名)

【讨论】:

    【解决方案2】:
    from Computer computer inner join computer.assemblers as assem
    

    【讨论】:

    • 它返回“computer.assemblers 表不存在”,因为它是“一对多”关系我将其更改为 computer_assemblers 但结果显示所有计算机记录
    • 嗯,会不会是别名的原因?如果你说from Computer c inner join c.assemblers as assem呢?
    • 同样的问题,当我将其更改为 computer_assebles 时,它会显示计算机的所有记录,并向所有记录添加汇编器列,显示仅与其中一个关联的汇编器之一的 ID
    • 我测试的完全一样,对我来说效果很好(通过内部连接缩小了范围)。所以不知道为什么你会得到所有的父母。
    【解决方案3】:
    List<Computer> list = session.createCriteria(Computer.class).setProjection(Projections.projectionList()
        .add(Projections.property("property.field1")).list();
    

    【讨论】:

    • 不是返回所有的电脑记录吗?
    • 这是错误的,你不能在标准方法中设置 projections.property 也不使用“as”
    • java4s.com/hibernate/… 我不确定你最后的评论是什么意思,但祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2023-03-24
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2015-05-24
    相关资源
    最近更新 更多