昨天用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方面的书籍了。
相关推荐
- 函数(Method):定义了代码块,可重复使用并接收参数,返回结果。 2. **面向对象编程(OOP)** - 类与对象:Java是面向对象的语言,一切皆对象。类是创建对象的模板,而对象是类的实例。 - 封装:隐藏实现...
- 大幅度减少了 JDBC 代码和手动参数设置以及结果集获取的工作。 - 可以使用简单的 XML 或注解进行配置与原始映射,实现接口与 Java POJOs 的数据库记录映射。 - 定义为半自动 ORM 框架,意味着它不像 Hibernate ...
Java数据库连接(JDBC)是Java访问数据库的标准API,可以用来执行SQL语句,处理结果集等。 **九、Java Web开发** 包括Servlet、JSP、JavaServer Faces(JSF)等技术,用于构建动态网页和Web应用。 **十、Java EE...
Query接口提供了执行HQL查询的方法,返回结果集可以是对象列表或单个对象。 7. **实体类和注解**:在Hibernate 3.5.2中,实体类通常用注解(如@Entity、@Table、@Id等)来标记,这些注解告诉Hibernate如何将类与...
"Statement"用于执行静态SQL语句,"PreparedStatement"用于预编译SQL语句,提高性能并防止SQL注入攻击,而"ResultSet"则用于存储数据库查询返回的数据集。 Java中的GUI(图形用户界面)编程常用词汇有"Swing"和"AWT...
除了 Java 8 相关内容,他的课程还涵盖了 JavaScript、Java 9(即将到来)、Hadoop、Spark、Hibernate/JPA 等众多技术和框架。这些课程不仅可以帮助企业更快地适应新技术,还能帮助开发人员提升技能和应对各种开发...
1. **基础语法**:包括变量、数据类型、运算符、流程控制语句(如if-else,switch,for,while等)以及方法定义。 2. **类与对象**:面向对象编程的基本概念,如封装、继承、多态性,以及如何创建和使用类和对象。 3...
14. JDBC检索数据的基本步骤:加载驱动、建立连接、创建Statement/PreparedStatement对象、执行SQL、获取结果集、关闭资源。 15. 动态INCLUDE是,静态INCLUDE是。动态INCLUDE在每次请求时都会执行,静态INCLUDE在...
- **Callable与Future:** Callable接口用于返回结果的任务,Future接口用于获取Callable任务的结果。学习如何使用它们实现异步编程。 - **ConcurrentHashMap:** ConcurrentHashMap是一个线程安全的HashMap实现。...
- **Map类型绑定**:如Map, String>。 - **中文乱码问题**:解决客户端与服务器间字符集不一致导致的问题。 - **自定义参数绑定实现日期转换**:通过自定义Converter或Formatter实现复杂类型的转换。 #### SSM...
此外,Spring Boot 对外提供了丰富的 Starter POMs,使得集成第三方库变得简单快捷,如数据访问(JPA、MyBatis)、安全(Spring Security)、监控(Spring Boot Actuator)等。 问题 7:什么是线程池?在 Java 中...
- **JDBC(Java Database Connectivity):** 是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如 Statement、PreparedStatement、ResultSet 等类用于执行 SQL 语句和处理结果集。...