0

我有一个使用 OpenJAP 进行数据库连接的 Web 项目。我已经配置了 persistence.xml 并且能够连接到数据库并检索数据。但是在控制台输出中我看到了这个条目

1953  OpenJPA  TRACE  [main] openjpa.jdbc.SQL - <t 31156635, conn 6888942> executing prepstmnt 9690924 

UPDATE student 
    SET scourse = ?, sname = ?, sroll = ? 
    WHERE id = ? 
[params=?, ?, ?, ?]

到目前为止,在我的整个项目中,我还没有添加任何准备好的声明或任何更新声明。我想知道为什么 OpenJPA 会执行此语句,以及当我获取数百万范围内的大数据时会对性能产生什么影响?

4

1 回答 1

0

我在 build.xml 文件中添加了以下代码

<!-- ***************************************************************************************************************** -->
<!-- DO NOT DELETE FOLLOWING CODE. THIS IS ADDED FOR ENCHANCING THE CLASSES AT COMPILE TIME. IT IS REQUIRED BY OPENJPA -->
<!-- Define the classpath to include the necessary files. -->
<!-- ex. openjpa jars, persistence.xml, orm.xml, and target classes  -->
<path id="jpa.enhancement.classpath">
    <!-- Assuming persistence.xml/orm.xml are in WebContent/WEB-INF/classes/META-INF -->
    <pathelement location="WebContent/WEB-INF/classes" />

    <!-- Location of the .class files -->
    <pathelement location="build/classes" />

    <!-- Add the openjpa jars -->
    <fileset dir=".">
        <include name="**/lib/*.jar" />
    </fileset>
</path>
<!-- define the openjpac task; this can be done at the top of the -->
<!-- build.xml file, so it will be available for all targets -->
<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask" classpathref="jpa.enhancement.classpath" />

<!-- invoke enhancer on all .class files below the model directory -->
<openjpac>
    <classpath refid="jpa.enhancement.classpath" />
    <fileset dir=".">
        <include name="**/model/*.class" />
    </fileset>
</openjpac>
<echo message="Enhancement complete" />
<!-- ***************************************************************************************************************** -->

添加这个并设置 Eclipse 以使用这个 build.xml 文件来创建 WAR 文件。对象正在得到增强,我的日志中没有“执行准备好的语句”跟踪,也没有执行额外的“更新”语句。

于 2012-06-04T12:30:51.397 回答