用于在控制台上显示select with query的实用程序

时间:2014-07-17 14:32:39

标签: java jpa

我正在寻找一个实用程序来运行JPA查询并在控制台中显示查询及其结果。就像在本机sql客户端中运行select语句一样:

ij> select * from standalonejpa.Emp_PHONE;
EMPLOYEE_ID|PHONE_NUM           |PHONENUMBE&
--------------------------------------------
1          |12938302            |0

我想编写一个方法,通过运行EntityManager的createQuery()和{{来接受一个参数 - 表名 - 和生成上述语句到控制台1}}。你知道这样的效用还是我必须自己精心制作呢?

2 个答案:

答案 0 :(得分:0)

不确定实用程序,但您可以启用日志记录以显示生成的SQL。

至于制作一个,我会创建一个与EclipseLink的记录器接口的监听器,以捕获日志输出,然后将其显示在屏幕上。

您可以直接通过持久层发送JPA查询,在运行时唯一不能做(或不能轻松做)的是添加新类,因为启动时必须知道启用JPA的类。虽然应该有一种特定于实现的方法来在运行时注册新的JPA类。

答案 1 :(得分:0)

我最终得到了使用JDBC查询的解决方案,并使用Derbytools实用程序类打印结果。我正在从JPA项目中选择所有表格:

    Connection conn = em.unwrap(Connection.class);
    Statement st = conn.createStatement();
    for(EntityType<?> et : emf.getMetamodel().getEntities()) {
        String query = "SELECT * FROM " + et.getName();
        System.out.println("> " + query);
        st.execute(query);
        JDBCDisplayUtil.DisplayResults(System.out, st, conn);
    }

结果我得到了相当格式化的结果,如:

> SELECT * FROM Employee
ID         
-----------
1          
51 

以下信息可以保持这篇文章的完整性: 我使用EclipseLink java.sql.Connection unwrapping并将我的pom.xml依赖项添加到Derbytools:

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbytools</artifactId>
        <version>10.10.2.0</version>
    </dependency>

实际上,你可以在任何数据库中使用Derbytools的漂亮打印,而不仅仅是Apache Derby。 我做的全部麻烦是为JPA映射创建一个“测试”项目,该项目将显示生成的表以及其中的数据。整个项目称为“jpa-testing”,可从my github获得。