Я хочу получить запрос, который выбирает всех родителей только с детьми, которые заполняют это условие. children.date = today. Целью является повышение производительности, мне не нужны дети других дней.Минус в запросе на спящий режим?
Query q = ss.createQuery("select p from Parent p where exists(from p.children c where c.date = :now)");
q.setTimestamp("now", new DateTime().minusDays(1).toDate());
qc=q.list();
Другой способ:
DateMidnight first = new DateMidnight(); //today at 00h00 00min 00 JodaTime
ss.createCriteria(Parent.class)
.createAlias("children", "c")
.add(Restrictions.between("c.date",first.toDate(), first.plus(14400000).toDate()))
.list();
родительский класс
@Entity
public class Parent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
private Integer id;
@OneToMany(cascade = {CascadeType.ALL},mappedBy = "parentId",fetch = FetchType.LAZY)
@Column(name="id_parent",nullable=true,unique = true)
@Cascade(value={org.hibernate.annotations.CascadeType.ALL,org.hibernate.annotations.CascadeType.SAVE_UPDATE,org.hibernate.annotations.CascadeType.DELETE,org.hibernate.annotations.CascadeType.REMOVE})
private List<Child> children=new ArrayList<Child>();
и Child.class
@Entity
public class Child implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
@Column(name = "childID", unique = true, nullable = false)
private long childId1;
private Date date;
private String childId2;
Я попробовал и обновил сообщение !! Все еще не работает – Rollyng
Что делать toDate()? Если ваш столбец является меткой времени (дата + ВРЕМЯ), то вашей проблемой может быть вызов toDate(), который выглядит так, как будто он возвращает дату, а не метку времени. – user743414
Я использую PostGreSQL, а столбец - это метка времени, но ti работает с датой. Но я не понимаю, что я ищу еще. – Rollyng