`
gy090028
  • 浏览: 27767 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JPA 返回Map类型结果集

    博客分类:
  • ORM
 
阅读更多

    昨天用apache OpenJPA做一个全局dao的Java类, 但是 javax.persistence.Query接口中并没有提供一个可以返回Map类型结果集的方法,用本地化sql查询语句查询的结果如果没有指定返回的对象类型,那么返回的对象是一个Object类型的数组,这无疑对我们代码的编程和书写带来了麻烦.

    顺便吐槽一下吐舌头,Sun个土鳖三,出了接口本想统一编程方法,但这么重要的方法却在接口里面没有定义.哎~

    查了半天,后来还是找到了解决的方法,不过这个方法在换了JPA实现之后,这部分代码还是得改动,并没有达到使用JPA的目的,希望能在后面的版本中添加返回Map的方法.

    

public class TestJPA {
	@PersistenceContext
	private EntityManager em;
	@Test
	public void doTest() {
		String sql = "";
		Query query = em.createNativeQuery(sql);
		QueryImpl impl = query.unwrap(QueryImpl.class);
		impl.setResultClass(Map.class);
		List list = query.getResultList();
	}
}

    如上代码中,  query接口提供了一个 unwrap 方法,该方法传递一个Query的实现类可以返回当前Query的实现类实例, QueryImpl是openJPA的实现类,如果项目中用的是其他的ORM实现,可以在代码中选中Query按Ctrl+T 查看具体的实现类,在实现类中有设置返回类型为Map的方法.OpenJPA中设置 impl.setResultClass(Map.class)之后,此Query的查询结果就会是一个List<Map> 类型的结果集.

  

  上面的方法有时候会返回一个Proxy对象,后来又查阅资料发现有个更简单的方法:

Query query = em.createNativeQuery(sql,java.util.Map.class);  

   这样就可以直接返回Map格式的结果集了。

 

  都怪自己学艺不精,在上面瞎搞,看来得好好研读一下JPA方面的书籍了。

 

 

分享到:
评论

相关推荐

    Java核心知识点总结、毕业生必掌握资料,免费下载;

    - 函数(Method):定义了代码块,可重复使用并接收参数,返回结果。 2. **面向对象编程(OOP)** - 类与对象:Java是面向对象的语言,一切皆对象。类是创建对象的模板,而对象是类的实例。 - 封装:隐藏实现...

    MyBatis技术文档.pdf

    - 大幅度减少了 JDBC 代码和手动参数设置以及结果集获取的工作。 - 可以使用简单的 XML 或注解进行配置与原始映射,实现接口与 Java POJOs 的数据库记录映射。 - 定义为半自动 ORM 框架,意味着它不像 Hibernate ...

    Java优秀课件教程

    Java数据库连接(JDBC)是Java访问数据库的标准API,可以用来执行SQL语句,处理结果集等。 **九、Java Web开发** 包括Servlet、JSP、JavaServer Faces(JSF)等技术,用于构建动态网页和Web应用。 **十、Java EE...

    Hibernate 3.5.2 中文API

    Query接口提供了执行HQL查询的方法,返回结果集可以是对象列表或单个对象。 7. **实体类和注解**:在Hibernate 3.5.2中,实体类通常用注解(如@Entity、@Table、@Id等)来标记,这些注解告诉Hibernate如何将类与...

    java开发常用词汇1845词

    "Statement"用于执行静态SQL语句,"PreparedStatement"用于预编译SQL语句,提高性能并防止SQL注入攻击,而"ResultSet"则用于存储数据库查询返回的数据集。 Java中的GUI(图形用户界面)编程常用词汇有"Swing"和"AWT...

    Java-8-Streams-Part-1.pdf

    除了 Java 8 相关内容,他的课程还涵盖了 JavaScript、Java 9(即将到来)、Hadoop、Spark、Hibernate/JPA 等众多技术和框架。这些课程不仅可以帮助企业更快地适应新技术,还能帮助开发人员提升技能和应对各种开发...

    niit在线考试

    1. **基础语法**:包括变量、数据类型、运算符、流程控制语句(如if-else,switch,for,while等)以及方法定义。 2. **类与对象**:面向对象编程的基本概念,如封装、继承、多态性,以及如何创建和使用类和对象。 3...

    Java面试题目定义.pdf

    14. JDBC检索数据的基本步骤:加载驱动、建立连接、创建Statement/PreparedStatement对象、执行SQL、获取结果集、关闭资源。 15. 动态INCLUDE是,静态INCLUDE是。动态INCLUDE在每次请求时都会执行,静态INCLUDE在...

    java学习路线.docx

    - **Callable与Future:** Callable接口用于返回结果的任务,Future接口用于获取Callable任务的结果。学习如何使用它们实现异步编程。 - **ConcurrentHashMap:** ConcurrentHashMap是一个线程安全的HashMap实现。...

    SSM集成应用

    - **Map类型绑定**:如Map, String&gt;。 - **中文乱码问题**:解决客户端与服务器间字符集不一致导致的问题。 - **自定义参数绑定实现日期转换**:通过自定义Converter或Formatter实现复杂类型的转换。 #### SSM...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.41.docx

    此外,Spring Boot 对外提供了丰富的 Starter POMs,使得集成第三方库变得简单快捷,如数据访问(JPA、MyBatis)、安全(Spring Security)、监控(Spring Boot Actuator)等。 问题 7:什么是线程池?在 Java 中...

    java面试试题

    - **JDBC(Java Database Connectivity):** 是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如 Statement、PreparedStatement、ResultSet 等类用于执行 SQL 语句和处理结果集。...

Global site tag (gtag.js) - Google Analytics