Joined: Tue Mar 27, 2007 10:55 pm Posts: 2103 Location: Earth Has thanked: 39 time Have thanks: 56 time
Using named native query , you can write simple SQL queries and run it on your JPA model . You may need to do this in cases when you need a specific database query that you can't do with EJB-QL . Sometimes for performance issues .
You can add native query using @NamedNativeQuery annotation .
public class Topic implements java.io.Serializable{ /** * */ private static final long serialVersionUID = 1L; @Id private int Id; private String title; private Date creationDate; private Date modifedDate; private String content; @OneToMany(mappedBy="topic") private Collection<Comment> comments;
public int getId(){ return Id; } public void setId(int id){ Id = id; } @Column(name="TITLE") public String getTitle(){ return title; } public void setTitle(String title){ this.title = title; } @Column(name="CREATION_DATE") public Date getCreationDate(){ return creationDate; } public void setCreationDate(Date creationDate){ this.creationDate = creationDate; } @Column(name="MODIFED_DATE") public Date getModifedDate(){ return modifedDate; } public void setModifedDate(Date modifedDate){ this.modifedDate = modifedDate; } @Column(name="CONTENT") public String getContent(){ return content; } public void setContent(String content){ this.content = content; } public void setComments(Collection<Comment> comments){ this.comments = comments; } public Collection<Comment> getComments(){ return comments; } }
/** * @author codemiles. * */ public abstract class JPAService { private EntityManager entityManager;
/** * @param args */ public void insertTopic(Topic topic) { EntityManagerFactory factory = Persistence .createEntityManagerFactory("persistenceUnitName"); entityManager = factory.createEntityManager(); entityManager.getTransaction().begin(); Date date = new Date(System.currentTimeMillis()); List<Topic> list = loadTopicByDate( date); if (list != null) { for (Topic currentTopic : list) { System.out.println("Topic id#(" + currentTopic.getId() + " ). Title = " + currentTopic.getTitle() + " , Content = " + currentTopic.getContent()); } } entityManager.persist(topic); entityManager.getTransaction().commit(); entityManager.close(); factory.close();
}
/** * Using native query . * @param date * date of the creation . * @return * List of topics retrieved */ public List<Topic> loadTopicByDate(Date date) { Query query = entityManager.createNativeQuery("nativeTopicByDate"); query.setParameter(1, date);