package com.ctp.cdi.query.test.service; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.LockModeType; import com.ctp.cdi.query.AbstractEntityDao; import com.ctp.cdi.query.FirstResult; import com.ctp.cdi.query.MaxResults; import com.ctp.cdi.query.Modifying; import com.ctp.cdi.query.Query; import com.ctp.cdi.query.QueryParam; import com.ctp.cdi.query.QueryResult; import com.ctp.cdi.query.test.domain.Simple; public abstract class SimpleDao extends AbstractEntityDao<Simple, Long> { public List<Simple> implementedQueryByName(String name) { String query = "select s from Simple s where s.name = :name"; return entityManager().createQuery(query, Simple.class) .setParameter("name", name) .getResultList(); } @Query(named = Simple.BY_NAME_ENABLED, max = 1) public abstract List<Simple> findByNamedQueryIndexed(String name, Boolean enabled); @Query(named = Simple.BY_NAME_ENABLED) public abstract List<Simple> findByNamedQueryRestricted(String name, Boolean enabled, @MaxResults int max, @FirstResult Integer first); @Query(named = Simple.BY_ID, lock = LockModeType.PESSIMISTIC_WRITE) public abstract Simple findByNamedQueryNamed( @QueryParam("id") Long id, @QueryParam("enabled") Boolean enabled); @Query("select s from Simple s where s.name = ?1") public abstract Simple findByQuery(String name); @Query("select count(s) from Simple s where s.name = ?1") public abstract Long findCountByQuery(String name); public abstract Simple findByNameAndEnabled(String name, Boolean enabled); public abstract List<Simple> findByOrderByCounterAscIdDesc(); @Query(sql = "SELECT * from SIMPLE_TABLE s WHERE s.name = ?1") public abstract List<Simple> findWithNative(String name); @Modifying @Query("update Simple as s set s.name = ?1 where s.id = ?2") public abstract int updateNameForId(String name, Long id); @Query(named = Simple.BY_NAME_LIKE) public abstract QueryResult<Simple> queryResultWithNamed(String name); public abstract QueryResult<Simple> findByName(String name); @Override protected abstract EntityManager entityManager(); }