# JPA 2.1: Programmatic Named Queries
JPA 2.1: Programmatic Named Queries
In JPA 2.0 or the early version, you can define a named query by add a
JPA 2.1 brings a new programmatic approach to create a named query dynamically.
In the above the codes, use a
Replace the query string in the voteUp method with the following content.
The sample codes are hosted on my github.com account, check out and play it yourself.
https://github.com/hantsy/ee7-sandbox
In JPA 2.0 or the early version, you can define a named query by add a
@NamedQuery
annotation on the entity class. JPA 2.1 brings a new programmatic approach to create a named query dynamically.
@Startup
@Singleton
public class ApplicationInitializer {
@PersistenceContext
EntityManager em;
@PostConstruct
public void postConstruct(){
System.out.println("@@@application is iniitlized...");
Query query = em.createQuery("select count(vu)from Post p join treat(p.comments as VoteUp) vu where p.id=:id");
em.getEntityManagerFactory().addNamedQuery(Constants.NQ_COUNT_VOTE_UP, query);
}
}
In the above the codes, use a
@Singleton
EJB to create the named queries at EJB @Startup
stage. Replace the query string in the voteUp method with the following content.
private void fetchVoteDown() {
this.voteDown = ((Long) (em.createNamedQuery(Constants.NQ_COUNT_VOTE_UP)
.setParameter("id", this.id)
.getSingleResult())).intValue();
}
The sample codes are hosted on my github.com account, check out and play it yourself.
https://github.com/hantsy/ee7-sandbox