当我只运行select query

时间:2016-04-18 06:41:13

标签: java jpa ejb openjpa tomee

我开发了一个使用Open Jpa 2.1的休息Web服务,部署在TomEE中。

我的问题是,当我运行select query时,更新查询正在表中运行,我可以在日志中看到。

我注意到,当我遍历结果列表时,只会调用Update并为结果列表中的所有记录调用update。

日志

DEBUG   2016-04-18 13:23:48,766 [http-bio-28080-exec-3] openjpa.Runtime  - Found datasource1: datasource 9932945 from configuration. StoreContext: org.apache.openjpa.kernel.BrokerImpl@1d4022a
DEBUG   2016-04-18 13:23:48,766 [http-bio-28080-exec-3] openjpa.Runtime  - org.apache.openjpa.persistence.EntityManagerFactoryImpl@b7962e created EntityManager org.apache.openjpa.persistence.EntityManagerImpl@1d4022a.
DEBUG   2016-04-18 13:23:48,772 [http-bio-28080-exec-3] openjpa.Runtime  - Query "select p from EHSDo p " is cached."   
DEBUG   2016-04-18 13:23:48,772 [http-bio-28080-exec-3] openjpa.Query  - Executing query: select p from EHSDo p
DEBUG   2016-04-18 13:23:48,780 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 4067012> executing prepstmnt 21581928 SELECT t0.ID, t0.NAME FROM EHS t0
DEBUG   2016-04-18 13:23:48,780 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 4067012> [0 ms] spent
DEBUG   2016-04-18 13:23:48,781 [http-bio-28080-exec-3] openjpa.jdbc.JDBC  - <t 17558940, conn 4067012> [0 ms] close
DEBUG   2016-04-18 13:23:48,784 [http-bio-28080-exec-3] openjpa.jdbc.JDBC  - The batch limit is set to 0.
DEBUG   2016-04-18 13:23:48,784 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 20831240> executing prepstmnt 5407641 UPDATE EHS SET NAME = ? WHERE ID = ? [params=?, ?]
DEBUG   2016-04-18 13:23:48,785 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 20831240> [1 ms] spent
DEBUG   2016-04-18 13:23:48,834 [http-bio-28080-exec-3] openjpa.jdbc.JDBC  - <t 17558940, conn 20831240> [0 ms] close
DEBUG   2016-04-18 13:23:48,835 [http-bio-28080-exec-3] openjpa.Runtime  - org.apache.openjpa.persistence.EntityManagerImpl@1d4022a.close() invoked.

REST代码

@Path("rest")
public class Rest {
    private static final Logger logger = LoggerFactory.getLogger(Rest.class);

    @EJB
    EHSBeansLocal ehsBean;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("getAllEHS")
    public List<EHSDto> getAllEHS() {
        logger.debug("--------------------------- getAllEHS -----------------------------");
        return ehsBean.getAllEHS();
    }
}

EJB代码

  @Stateless
    public class EHSBeans implements EHSBeansLocal {

        private static final Logger logger = LoggerFactory.getLogger(EHSBeans.class);

        @PersistenceContext(unitName="EHS_PU")
        private EntityManager em;

        public EHSBeans(){
            logger.debug("EHSBean constructor called");
        }


        @Override
        public List<EHSDto> getAllEHS(){
            logger.debug("getAllEHS");
            List<EHSDto> dtolist = new ArrayList<EHSDto>();
            Query query = em.createQuery("select p from EHSDo p ");
            List<EHSDo> list = query.getResultList();
            if (list != null){

                for(EHSDo entity : list){
                    EHSDto e =  new EHSDto();
                    e.setId(entity.getId());
                    e.setName(entity.getName());
                    dtolist.add(e);

                }
            }

            return dtolist;



        }

    }

坚持XML

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="EHS_PU">
        <jta-data-source>mysqlDataSource</jta-data-source>
        <class>com.ap.entity.EHSDo</class>
        <properties>
            <property name="openjpa.Log" value="log4j" />
        </properties>
    </persistence-unit>
</persistence>

tomee.xml中的数据源

<Resource id="mysqlDataSource" type="javax.sql.DataSource">
  JdbcDriver        com.mysql.jdbc.Driver
  JdbcUrl           jdbc:mysql://localhost:3306/jpa
  UserName          root
  Password          root
  JtaManaged        true
  DefaultAutoCommit   true
  InitialSize       3
  MaxActive         20
  MinIdle           20
  MaxIdle           0
  MaxWait           50000
  ValidationQuery   SELECT 1
  TestOnBorrow      true
  TestOnReturn      false
  TestWhileIdle     false
</Resource>

0 个答案:

没有答案