自适应网站一般用什么框架做,wordpress主页面编辑器,头条淘宝联盟网站推广怎么做,商标做网站logoJPA为您提供NamedNativeQuery以便使用本机SQL。 但是#xff0c;用法并不方便#xff0c;特别是当您需要在本机SQL中映射多个实体时。 您必须定义一组SqlResultSetMapping映射#xff0c;这很容易出错。 对于以前使用过Hibernate本机SQL功能的用户#xff0c;您会发现它比J… JPA为您提供NamedNativeQuery以便使用本机SQL。 但是用法并不方便特别是当您需要在本机SQL中映射多个实体时。 您必须定义一组SqlResultSetMapping映射这很容易出错。 对于以前使用过Hibernate本机SQL功能的用户您会发现它比JPA的NamedNativeQuery更易于使用。 在最近的项目中我正在使用Spring Data JPA。 我已将Hibernate的本机查询功能添加到我的Spring数据库中。 现在您可以在JPA中执行本机查询而无需使用SqlResultSetMapping。 1.添加您的客户注解NativeQueries和NativeQuery Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
public interface NativeQueries {NativeQuery[] queries() default {};
}Retention(RetentionPolicy.RUNTIME)
public interface NativeQuery {String name() default ;String sql() default ;
} 2.在基础Spring Data Repository中添加“ queryNatively”方法。 如果您不知道如何向Spring数据JPA基础存储库添加自定义行为请参阅我以前的文章 了解如何自定义Spring数据JPA基础存储库 。 您可以在上一篇文章中看到我有意在GenericRepositoryImpl中公开存储库接口即springDataRepositoryInterface属性。 这些小技巧使我能够轻松访问存储库界面中的注释。 public List queryNatively(String nativeQueryName, LinkedHashMapString,Class? inEntityClasses, Map inParams ){SQLQuery query this.createHibernateNativeQuery( nativeQueryName, inParams );//add entitiesif (inEntityClasses!null) { for (Object key: inEntityClasses.keySet()) {String entityClassAlias key.toString();Class? entityClass (Class?)inEntityClasses.get(key); query.addEntity(entityClassAlias,entityClass);} }//add parameterif (inParams ! null){for (Object key: inParams.keySet()) {String queryParamName key.toString();Object queryParamValue inParams.get(key);query.setParameter(queryParamName, queryParamValue);}} return (query!null)? query.list() : null ;}private SQLQuery createHibernateNativeQuery (String nativeQueryName, Map inParams ){if (GenericRepository.class.isAssignableFrom(getSpringDataRepositoryInterface())) {Annotation nativeQueryAnn getSpringDataRepositoryInterface().getAnnotation(NativeQueries.class);if(nativeQueryAnn ! null){NativeQueries nativeQueries (NativeQueries)nativeQueryAnn;NativeQuery[] queries nativeQueries.queries();for (NativeQuery sqlquery : queries) { if (StringUtils.equals(nativeQueryName, sqlquery.name())) {String sql sqlquery.sql();Session hiernateSess em.unwrap(Session.class);SQLQuery query hiernateSess.createSQLQuery(sql);//add parameterif (inParams ! null){for (Object key: inParams.keySet()) {String queryParamName key.toString();Object queryParamValue inParams.get(key);query.setParameter(queryParamName, queryParamValue);}} return query;} }}}return null;} 3.示例用法 在存储库界面中通过NativeQueries和NativeQuery批注定义要使用的本机SQL查询。 用法与调用Hibernate本机查询功能相似。 您可能只看到Hibernate别名和属性引用 。 NativeQueries (queries {NativeQuery(namequery1, sqlSELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID c.ID and c.name :catName ),NativeQuery(namequery2, sqlSELECT {cat.*} FROM CATS where c.ID :catName) }
)
public interface CatRepository extends GenericRepositoryCat, Long {
} 在注入存储库的服务或业务类中您只需简单地调用queryNatively方法即可执行本机SQL查询。 Service
public class CatService {Injectprivate CatRepository catRepository;public ListCat searchCat( String catName) {ListCat catList;// Add entity mapping for your queryHashMapString, Object inParams new HashMapString, Object();inParams.put(catName, Felix);// Prepare parameters for your native sqlLinkedHashMapString, Object entityMap new LinkedHashMapString, Object();entityMap.put(cat, Cat.class);entityMap.put(mother,Mother.class);catList catRepository.queryNatively(query1, ,entityParam);return catList;}
} 参考来自Programming Peacely博客的JCG合作伙伴 Boris Lam 向您的Spring Data Repository中添加了Hibernate本机SQL功能 。 翻译自: https://www.javacodegeeks.com/2012/08/hibernate-native-sql-features-into-your.html