Google app engine AppEngine上的DataNucleus未返回任何结果

Google app engine AppEngine上的DataNucleus未返回任何结果,google-app-engine,google-cloud-endpoints,google-cloud-sql,datanucleus,Google App Engine,Google Cloud Endpoints,Google Cloud Sql,Datanucleus,我几乎尝试了所有方法,但在以下目标平台上运行简单的SQL查询时,我没有收到任何结果:使用DataNucleus的Google AppEngine+Google Cloud SQL数据存储(全部在Google Cloud平台上)。 我已经部署了一个基本的Javaservlet,并设置了一个简单的MySql表。详情如下。最令人沮丧的是,我不知道如何获得更多信息以取得进展。非常感谢你的帮助。同样,结果集中没有错误,只是没有结果 数据库 当然,我100%肯定表中有数据。My database(MySql

我几乎尝试了所有方法,但在以下目标平台上运行简单的SQL查询时,我没有收到任何结果:使用DataNucleus的Google AppEngine+Google Cloud SQL数据存储(全部在Google Cloud平台上)。 我已经部署了一个基本的Javaservlet,并设置了一个简单的MySql表。详情如下。最令人沮丧的是,我不知道如何获得更多信息以取得进展。非常感谢你的帮助。同样,结果集中没有错误,只是没有结果

数据库 当然,我100%肯定表中有数据。My database(MySql)在架构“vicparkhoney”中具有下表:

CREATE TABLE `mytable` ( `name` varchar(255) DEFAULT NULL);
直接在MySql workbench中输入的以下查询给出两个结果:

SELECT * FROM vicparkhoney.mytable;
结果:

name
===========
Name1
Name2
(即使在为那些怀疑我是否提交了插入内容的人重新连接了几次之后……)

这对您来说并不奇怪,以下查询返回一个结果:

SELECT * FROM vicparkhoney.mytable n WHERE n.name = 'Name1';

name
===========
Name1
Java代码 当通过DataNucleus运行JPA查询时,我没有得到相同的结果。这是我的Servlet代码:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("transactions-optional");
EntityManager em = emf.createEntityManager();
Query q = em.createQuery("select n from MyTable n where n.name = 'Name1'");
List results = q.getResultList();
Iterator iter = results.iterator();
MyTable n = null;
while (iter.hasNext()) {
    n = (MyTable)iter.next();
}
em.close();
这是实体类的
MyTable
代码:

package com.vicparkhoney.backend.bean;
import javax.persistence.*;

@Entity
@Table( name = "mytable" )
public class MyTable {

    @Basic
    @Id
    private String name;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
}
JPA配置 这是我的persistence.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<persistence 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_1_0.xsd"         
    version="1.0">

<persistence-unit name="transactions-optional">
    <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
    <class>com.vicparkhoney.backend.bean.MyTable</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="datanucleus.mapping.Schema" value="vicparkhoney"/>
        <property name="datanucleus.NontransactionalRead" value="true"/>
        <property name="datanucleus.NontransactionalWrite" value="true"/>
        <property name="datanucleus.ConnectionURL" value="appengine"/>
    </properties>
</persistence-unit>
</persistence>
日志:

20:08:55.937
org.datanucleus.query.JPQLSingleStringParser <init>: JPQL Single-String with "select n from MyTable n where n.name = 'Name1'"
20:08:56.141
org.datanucleus.store.query.AbstractJPQLQuery compileInternal: JPQL Query : Compiling "SELECT n FROM MyTable n WHERE n.name = 'Name1'"
20:08:56.339
org.datanucleus.store.query.AbstractJPQLQuery compileInternal: JPQL Query : Compile Time = 198 ms
20:08:56.340
org.datanucleus.store.query.AbstractJPQLQuery compileInternal: QueryCompilation:
  [from:ClassExpression(alias=n)]
  [filter:DyadicExpression{PrimaryExpression{n.name}  =  Literal{Name1}}]
  [symbols: n type=com.vicparkhoney.backend.bean.MyTable]
20:08:56.342
com.google.appengine.datanucleus.query.JPQLQuery performExecute: JPQL Query : Executing "SELECT n FROM MyTable n WHERE n.name = 'Name1'" ...
20:08:56.342
com.google.appengine.datanucleus.MetaDataValidator validate: Performing appengine-specific metadata validation for com.vicparkhoney.backend.bean.MyTable
20:08:56.344
com.google.appengine.datanucleus.MetaDataValidator validate: Finished performing appengine-specific metadata validation for com.vicparkhoney.backend.bean.MyTable
20:08:56.628
org.datanucleus.store.StoreDataManager registerStoreData: Managing Persistence of Class : com.vicparkhoney.backend.bean.MyTable [Table : com.vicparkhoney.backend.bean.MyTable, InheritanceStrategy : new-table]
20:08:57.342
com.google.appengine.datanucleus.query.JPQLQuery performExecute: Query compiled as : Kind=com.vicparkhoney.backend.bean.MyTable Filter : __key__=mytable("Name1") [QUERY-TYPE=NORMAL]
20:08:57.439
com.google.appengine.datanucleus.query.DatastoreQuery performExecute: Executing query in datastore for SELECT n FROM MyTable n WHERE n.name = 'Name1'
20:08:58.930
com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection <init>: Created ManagedConnection using DatastoreService = com.google.appengine.api.datastore.DatastoreServiceImpl@9355b6
20:08:58.937
org.datanucleus.store.connection.ConnectionManagerImpl allocateConnection: Connection added to the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c for key=org.datanucleus.ObjectManagerImpl@15f65a1 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@3817d7]
20:08:58.938
com.google.appengine.datanucleus.query.JPQLQuery performExecute: JPQL Query : Execution Time = 2596 ms
20:08:59.150
org.datanucleus.store.connection.ConnectionManagerImpl closeAllConnections: Connection found in the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c for key=org.datanucleus.ObjectManagerImpl@15f65a1 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@3817d7] but owner object closing so closing connection
20:08:59.220
org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose: Connection removed from the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c for key=org.datanucleus.ObjectManagerImpl@15f65a1 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@3817d7]
20:08:59.220
org.datanucleus.ObjectManagerImpl disconnectObjectProvidersFromCache: Level 1 Cache cleared
20:08:59.223
org.datanucleus.ObjectManagerImpl close: Object Manager "org.datanucleus.ObjectManagerImpl@15f65a1" closed
20:08:55.937
org.datanucleus.query.jpqlsingelstringparser:JPQL带有“从MyTable n中选择n,其中n.name='Name1'”的单个字符串
20:08:56.141
org.datanucleus.store.query.AbstractJPQLQuery编译器内部:JPQL查询:编译“从MyTable n中选择n,其中n.name='Name1'”
20:08:56.339
org.datanucleus.store.query.AbstractJPQLQuery编译器内部:JPQL查询:编译时间=198毫秒
20:08:56.340
org.datanucleus.store.query.AbstractJPQLQuery编译器内部:QueryCompilation:
[from:ClassExpression(别名=n)]
[筛选器:DyadicExpression{PrimaryExpression{n.name}=Literal{Name1}]
[符号:n type=com.vicparkheney.backend.bean.MyTable]
20:08:56.342
com.google.appengine.datanucleus.query.JPQLQuery性能执行:JPQL查询:执行“从MyTable n中选择n,其中n.name='Name1'”。。。
20:08:56.342
com.google.appengine.datanucleus.MetaDataValidator验证:对com.vicparkhene.backend.bean.MyTable执行appengine特定的元数据验证
20:08:56.344
com.google.appengine.datanucleus.MetaDataValidator验证:已完成对com.vicparkhene.backend.bean.MyTable执行特定于appengine的元数据验证
20:08:56.628
org.datanucleus.store.StoreDataManager注册表storedata:管理类的持久性:com.vicparkheney.backend.bean.MyTable[表:com.vicparkheney.backend.bean.MyTable,InheritateSectorategy:新表]
20:08:57.342
com.google.appengine.datanucleus.query.JPQLQuery performExecute:query编译为:Kind=com.vicparkhene.backend.bean.MyTable过滤器:_; key___;=MyTable(“Name1”)[query-TYPE=NORMAL]
20:08:57.439
com.google.appengine.datanucleus.query.DatastoreQuery性能执行:在数据存储中对MyTable n中的SELECT n执行查询,其中n.name='Name1'
20:08:58.930
com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection:使用DatastoreService=com.google.appengine.api.datastore创建ManagedConnection。DatastoreServiceImpl@9355b6
20:08:58.937
org.datanucleus.store.connection.ConnectionManagerImpl allocateConnection:添加到池中的连接:com.google.appengine.datanucleus.datastoreconnectionfactorympl$DatastoreManagedConnection@56c36c对于key=org.datanucleus。ObjectManagerImpl@15f65a1工厂内=连接工厂:nontx[com.google.appengine.datanucleus。DatastoreConnectionFactoryImpl@3817d7]
20:08:58.938
com.google.appengine.datanucleus.query.JPQLQuery性能执行:JPQL查询:执行时间=2596毫秒
20:08:59.150
org.datanucleus.store.connection.ConnectionManagerImpl closeAllConnections:在池中找到的连接:com.google.appengine.datanucleus.datastoreconnectionfactorympl$DatastoreManagedConnection@56c36c对于key=org.datanucleus。ObjectManagerImpl@15f65a1工厂内=连接工厂:nontx[com.google.appengine.datanucleus。DatastoreConnectionFactoryImpl@3817d7]但是所有者对象正在关闭,所以正在关闭连接
20:08:59.220
org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose:从池中删除的连接:com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c对于key=org.datanucleus。ObjectManagerImpl@15f65a1工厂内=连接工厂:nontx[com.google.appengine.datanucleus。DatastoreConnectionFactoryImpl@3817d7]
20:08:59.220
org.datanucleus.ObjectManagerImpl断开ObjectProvidersFromCache:已清除1级缓存
20:08:59.223
org.datanucleus.ObjectManagerImpl关闭:对象管理器“org.datanucleus”。ObjectManagerImpl@15f65a1“封闭的
“谷歌AppEngine”最初只有自己的“NoSQL”数据库名为
GAE/Datastore
。谷歌提供了自己的
DataNucleus
插件来支持持久性,称为DataNucleus-appengine.jar。此数据存储需要将
DataNucleus.ConnectionURL
设置为appengine。如果使用此插件,那么您将使用非常旧的jarjar不能处理最近的任何东西

然后他们在“Google CloudSQL”上添加了,它附带了一个
MySQL/MariaDB
数据库。DataNucleus项目提供了自己的插件,名为DataNucleus rdbms.jar。使用此插件,您可以使用最新的DataNucleus项目jar。此数据存储要求将
DataNucleus.ConnectionURL
设置为从jdbc开始的内容

您当前使用的是GAE/Datastore数据库,而不是MySQL(因此您在MySQL中手动运行东西的测试都很好,但是您还没有将持久层配置为使用该数据库!)。您需要修复ConnectionURL并确保在类路径中有datanucleus rdbms jar。此外,请阅读相关站点的文档(如果希望使用GAE/Datastore数据库,或者
20:08:55.937
org.datanucleus.query.JPQLSingleStringParser <init>: JPQL Single-String with "select n from MyTable n where n.name = 'Name1'"
20:08:56.141
org.datanucleus.store.query.AbstractJPQLQuery compileInternal: JPQL Query : Compiling "SELECT n FROM MyTable n WHERE n.name = 'Name1'"
20:08:56.339
org.datanucleus.store.query.AbstractJPQLQuery compileInternal: JPQL Query : Compile Time = 198 ms
20:08:56.340
org.datanucleus.store.query.AbstractJPQLQuery compileInternal: QueryCompilation:
  [from:ClassExpression(alias=n)]
  [filter:DyadicExpression{PrimaryExpression{n.name}  =  Literal{Name1}}]
  [symbols: n type=com.vicparkhoney.backend.bean.MyTable]
20:08:56.342
com.google.appengine.datanucleus.query.JPQLQuery performExecute: JPQL Query : Executing "SELECT n FROM MyTable n WHERE n.name = 'Name1'" ...
20:08:56.342
com.google.appengine.datanucleus.MetaDataValidator validate: Performing appengine-specific metadata validation for com.vicparkhoney.backend.bean.MyTable
20:08:56.344
com.google.appengine.datanucleus.MetaDataValidator validate: Finished performing appengine-specific metadata validation for com.vicparkhoney.backend.bean.MyTable
20:08:56.628
org.datanucleus.store.StoreDataManager registerStoreData: Managing Persistence of Class : com.vicparkhoney.backend.bean.MyTable [Table : com.vicparkhoney.backend.bean.MyTable, InheritanceStrategy : new-table]
20:08:57.342
com.google.appengine.datanucleus.query.JPQLQuery performExecute: Query compiled as : Kind=com.vicparkhoney.backend.bean.MyTable Filter : __key__=mytable("Name1") [QUERY-TYPE=NORMAL]
20:08:57.439
com.google.appengine.datanucleus.query.DatastoreQuery performExecute: Executing query in datastore for SELECT n FROM MyTable n WHERE n.name = 'Name1'
20:08:58.930
com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection <init>: Created ManagedConnection using DatastoreService = com.google.appengine.api.datastore.DatastoreServiceImpl@9355b6
20:08:58.937
org.datanucleus.store.connection.ConnectionManagerImpl allocateConnection: Connection added to the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c for key=org.datanucleus.ObjectManagerImpl@15f65a1 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@3817d7]
20:08:58.938
com.google.appengine.datanucleus.query.JPQLQuery performExecute: JPQL Query : Execution Time = 2596 ms
20:08:59.150
org.datanucleus.store.connection.ConnectionManagerImpl closeAllConnections: Connection found in the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c for key=org.datanucleus.ObjectManagerImpl@15f65a1 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@3817d7] but owner object closing so closing connection
20:08:59.220
org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose: Connection removed from the pool : com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl$DatastoreManagedConnection@56c36c for key=org.datanucleus.ObjectManagerImpl@15f65a1 in factory=ConnectionFactory:nontx[com.google.appengine.datanucleus.DatastoreConnectionFactoryImpl@3817d7]
20:08:59.220
org.datanucleus.ObjectManagerImpl disconnectObjectProvidersFromCache: Level 1 Cache cleared
20:08:59.223
org.datanucleus.ObjectManagerImpl close: Object Manager "org.datanucleus.ObjectManagerImpl@15f65a1" closed