在 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 运算符 - Repartos
和 RepartosDetalle
:
SELECT e FROM Repartos e JOIN RepartosDetalle d
WHERE e.fecha = :searchDate
AND d.descargado = TRUE
希望有人能帮助我。我有两个与 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 运算符 - Repartos
和 RepartosDetalle
:
SELECT e FROM Repartos e JOIN RepartosDetalle d
WHERE e.fecha = :searchDate
AND d.descargado = TRUE