在 OneToMany 关系中按集合的 属性 过滤的 JPA 查询

JPA query filtered by a collection's property in a OneToMany relationship

希望有人能帮助我。我有两个与 OneToMany 相关的实体。 第一:

@Entity
@Table(name = "repartos")
@XmlRootElement

public class Repartos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Column(name = "fecha")
    @Temporal(TemporalType.DATE)
    private Date fecha;

    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "repartoId")
    public List<RepartosDetalle> repartosDetalleList;
.....

然后是另一个:

@Entity
@Table(name = "repartos_detalle")
@XmlRootElement

public class RepartosDetalle implements Serializable {

  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Basic(optional = false)
  @Column(name = "id")
  private Integer id;

  @JoinColumn(name = "reparto_id", referencedColumnName = "id")
  @ManyToOne(optional = false)
  private Repartos repartoId;
  @Column(name = "descargado")
  @Convert(converter = BooleanOneZeroConverter.class)
  private boolean descargado;

  public RepartosDetalle() {
  }

  public RepartosDetalle(Repartos repartoId) {
    this.repartoId = repartoId;
  }

  public Repartos getRepartoId() {
    return repartoId;
  }

  public void setRepartoId(Repartos repartoId) {
    this.repartoId = repartoId;
  }

  public boolean isDescargado() {
    return descargado;
  }

  public void setDescargado(boolean descargado) {
    this.descargado = descargado;
  }

}

我试图得到的是给定日期的所有 Repartos,并且它们至少有一个带有 属性 descargado=TRUE 的 RepartosDetalle。 我一直在尝试使用以下查询,但没有得到任何结果。

@Override
  public List<Repartos> buscarPorFechaDescargados(Date searchDate) {
    Query q = em.createQuery("SELECT e FROM Repartos  e "
            + "WHERE e.fecha  = :searchDate"
            + " AND e.repartosDetalleList.descargado=TRUE");
       q.setParameter("searchDate", searchDate);
       return q.getResultList();
  }

是否有使用集合的 属性 值之一进行此查询的正确方法? 非常感谢,周末愉快。

尝试在这两个实体上使用 JOIN 运算符 - RepartosRepartosDetalle :

SELECT e FROM Repartos e JOIN RepartosDetalle d
WHERE e.fecha = :searchDate
AND d.descargado = TRUE