package com.ctp.cdi.query.test.service;
import java.util.List;
import javax.persistence.criteria.JoinType;
import com.ctp.cdi.query.AbstractEntityDao;
import com.ctp.cdi.query.criteria.CriteriaSupport;
import com.ctp.cdi.query.test.domain.OneToMany;
import com.ctp.cdi.query.test.domain.OneToMany_;
import com.ctp.cdi.query.test.domain.OneToOne;
import com.ctp.cdi.query.test.domain.OneToOne_;
import com.ctp.cdi.query.test.domain.Parent;
import com.ctp.cdi.query.test.domain.Parent_;
public abstract class ParentDao extends AbstractEntityDao<Parent, Long>
implements CriteriaSupport<Parent> {
public List<Parent> joinQuery(String name, String oneName, String manyName) {
return criteria()
.eq(Parent_.name, name)
.join(Parent_.one,
where(OneToOne.class, JoinType.LEFT)
.eq(OneToOne_.name, oneName)
)
.join(Parent_.many,
where(OneToMany.class)
.eq(OneToMany_.name, manyName)
)
.createQuery()
.getResultList();
}
public List<Parent> nullAwareQuery(String name1, String name2, Long counter) {
return criteria()
.eq(Parent_.name, name1)
.eq(Parent_.name, name2)
.eq(Parent_.value, counter)
.createQuery()
.getResultList();
}
public Parent fetchQuery(String name) {
return criteria()
.eq(Parent_.name, name)
.fetch(Parent_.many)
.distinct()
.createQuery()
.getSingleResult();
}
public List<Parent> fetchByName(String name1, String name2, String name3) {
return criteria()
.in(Parent_.name, name1, name2, name3)
.createQuery()
.getResultList();
}
public List<Parent> orQuery(String name1, String name2) {
return criteria()
.or(
criteria()
.eq(Parent_.name, name2)
.between(Parent_.value, 50L, 100L),
criteria()
.eq(Parent_.name, name1)
.between(Parent_.value, 0L, 50L),
criteria()
.eq(Parent_.name, "does not exist!")
)
.createQuery()
.getResultList();
}
public List<Parent> orderedQuery() {
return criteria()
.orderAsc(Parent_.name)
.createQuery()
.getResultList();
}
}