createQuery: Java Persistence Query Language (JPQL) kullanılır. createNamedQuery: İsim ile haritalama yapılan (mapping) dosyadan veya belirtim (annotation) ile kullanılır. createNativeQuery: doğma/saf SQL sorgusu çalıştırmak için kullanılır. SQL, JPQL’den daha fazla özellik sunmaktadır her zaman JPQL ile ilerleyemebilirsiniz. createNativeQuery ile parametre kullanmadan sql sorusu oluşturmak için [code lang=”sql”] String queryStr = "SELECT *" + " FROM announcement A JOIN announcement_customergroup ACG ON (ACG.announcement_id = A.annId AND A.companya_id= 2 and ACG.customergroup_id = 12)" + " UNION ALL" + " SELECT *, ‘0’,’0’" + " FROM announcement A2 WHERE annid" + " NOT IN (SELECT ACG2.announcement_id from announcement_customergroup ACG2) AND A2.companya_id= 2" + " ORDER BY A.startDate DESC"; Query q = em.createNativeQuery(queryStr, Announcement.class); List announcementList= q.getResultList(); [/code] createNativeQueryile Java Persistence Query Language(JPQL) yazım şekli ile parametre kullanarak sorgu oluşturmak için [code lang=”sql”] int companyGroupId = 2; int customerGroupId = 12; Date startDate = new Date(); String queryStr = "SELECT *" + " FROM announcement A" + " JOIN announcement_customergroup ACG" + " ON (ACG.announcement_id = A.annId" + " AND A.companya_id = ?" + " AND ACG.customergroup_id = ?" + " AND A.isDeleted = ?" + " AND A.startDate <= ?" + " AND A.endDate >= ?" + " AND A.isActive = ?" + " AND A.type_id = ?" + " AND A.companya_id = ?" + ")" + " UNION ALL" + " SELECT *, ‘0’,’0’" + " FROM announcement A2 WHERE annid" + " NOT IN (SELECT ACG2.announcement_id from announcement_customergroup ACG2)" + " AND A2.companya_id = ?" + " ORDER BY A.startDate DESC"; Query query = em.createNativeQuery(queryStr, Announcement.class) .setParameter(1, companyGroupId) .setParameter(2, customerGroupId); query.setParameter(3, false); query.setParameter(4, new java.sql.Date(startDate.getTime())); query.setParameter(5, new java.sql.Date(startDate.getTime())); query.setParameter(6, true); query.setParameter(7, type); query.setParameter(8, companyGroupId); query.setParameter(9, companyGroupId); List announcementList = query.getResultList(); [/code] TypedQuery ile parametre adı kullanarak parametreleri verme sql komutu [code lang=”sql”] TypedQuery<Catalog> query = em.createQuery("SELECT c FROM Catalog c WHERE c.salesChannelCode = :salesChannelCode and c.materialGroupCode = :materialGroupCode", Catalog.class); query.setParameter("salesChannelCode", salesChannelCode); query.setParameter("materialGroupCode", materialGroupCode); catalog = (Catalog) query.getSingleResult(); [/code] createNamedQuery, createQuery, TypedQuery-createNamedQuery örnekleri parametre vererek sql sorgusu hazırlama: [code lang=”sql”] @NamedQueries({ @NamedQuery( name = "OrderPaymentReplica.findByReqRefAndDate", query = "Select opr FROM OrderPaymentReplica opr WHERE opr.reqRef = :reqRef and opr.createdDate BETWEEN :startDate AND :endDate"), @NamedQuery( name = "Player.findAllOrderedByName", query = "SELECT p FROM Player p ORDER BY p.name") }) public class OrderPaymentReplica { } List<OrderPaymentReplica> orderPaymentReplicaList = em.createNamedQuery("OrderPaymentReplica.findByReqRefAndDate") .setParameter("reqRef", reqRef) .setParameter("startDate", beginDate, TemporalType.DATE) .setParameter("endDate", endDate, TemporalType.DATE) .getResultList(); Query query = em.createQuery("Select opr FROM OrderPaymentReplica opr WHERE opr.reqRef = :reqRef and opr.createdDate BETWEEN :startDate AND :endDate", OrderPaymentReplica.class) .setParameter("reqRef", reqRef) .setParameter("startDate", beginDate, TemporalType.DATE) .setParameter("endDate", endDate, TemporalType.DATE); orderPaymentReplicaList = query.getResultList(); orderPaymentReplicaResp.setList(orderPaymentReplicaList); TypedQuery<OrderPaymentReplica> typedQuery = em.createNamedQuery("OrderPaymentReplica.findByReqRefAndDate", OrderPaymentReplica.class) .setParameter("reqRef", reqRef) .setParameter("startDate", beginDate, TemporalType.DATE) .setParameter("endDate", endDate, TemporalType.DATE); List<OrderPaymentReplica> orderPaymentReplicaList02 = typedQuery.getResultList(); orderPaymentReplicaResp.setList(orderPaymentReplicaList02); [/code] burada dikkat edilmesi gereken nokta entity class’ınızın adınızın adını büyük küçük harfe duyarlı şekilde sorgu içerisinde kullanmanızdır ve * yerine tabloyu belirten alias kullanmanızdır ve jointable ile oluşturduğunuz tabloya ulaşırken ise örneğin c.userGroupList şeklinde ilerlemelisiniz. Yukarıdaki örneklerin dışında aşağıdaki kaynaklardan da yararlanabilirsiniz. docs.oracle.com JPQL oracle.com/technical-resources JPQL thoughts-on-java.org JPQL thoughts-on-java.org jpa-native-queries wiki.eclipse.org EclipseLink JPA JPQL]]>