2015-10-30 2 views
0

Надеюсь, что somebaody может мне помочь. У меня есть две организации, связанные с OneToMany. Первое:JPA-запрос, отфильтрованный по свойству коллекции в отношении 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 данные о дате и где они имеют Аль мере один RepartosDetalle со свойством descargado = TRUE. Я пытаюсь выполнить следующий запрос, но я не получаю никакого результата.

@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(); 
    } 

Есть ли способ сделать этот запрос, используя одно из значений свойства коллекции? Большое спасибо и хорошие выходные.

ответ

0

Попробуйте использовать JOIN оператора на этих 2-х лиц - Repartos и RepartosDetalle:

SELECT e FROM Repartos e JOIN RepartosDetalle d 
WHERE e.fecha = :searchDate 
AND d.descargado = TRUE 
Смежные вопросы