带有嵌入式类型查询的 Mongo/DataNucleus/JPA 给出:找不到(部分)的类型...因为符号没有类型;隐式变量?

Posted

技术标签:

【中文标题】带有嵌入式类型查询的 Mongo/DataNucleus/JPA 给出:找不到(部分)的类型...因为符号没有类型;隐式变量?【英文标题】:Mongo/DataNucleus/JPA with embedded type query gives: Cannot find type of (part of) ... since symbol has no type; implicit variable? 【发布时间】:2013-06-15 18:48:22 【问题描述】:

我正在尝试此 JPA 查询 "SELECT ml FROM MediaLibrary ml WHERE ml.media.id = :id",但收到以下错误消息:"Cannot find type of (part of) ml.media.id since symbol has no type; implicit variable?"

我意识到这可能应该是某种MEMBER OF 查询,但我尝试了相同的结果。我正在寻找包含 id 等于给定值的媒体的媒体库。

简化代码:

@Entity( name = "MediaLibrary" )
@Table( name = "MediaLibrary" )
public class MediaLibrary implements Serializable 
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String mediaLibraryKey;

    @Embedded
    private Set<Media> media;
....

@Embeddable
public class Media implements GenericDataProducer, CreationDateKnown, Serializable 
    private static final long serialVersionUID = 1L;

    @Column
    private String id;
....

我的 Mongo 数据看起来和我预期的一样:

db.MediaLibrary.find().pretty();

"_id" : ObjectId("51bcb440b3060638e5890581"),
    ....
"media" : [
    
                    ....
        "id" : "f0f9b014-24b1-4408-b0aa-3c9f74c822f8",
                    ....
    
]

更新:工作命令行 mongodb 查询是这样的:

db.MediaLibrary.find(  "media" :  $elemMatch :  "id" : "f0f9b014-24b1-4408-b0aa-3c9f74c822f8"    );

或者在java中:

new BasicDBObject( "media", new BasicDBObject( "$elemMatch", new BasicDBObject("id", id) ) );

更新:另一个查询:"SELECT ml FROM MediaLibrary ml WHERE :id MEMBER OF ml.media.id"

并在 FINE 级别输出:

FINE:JPQL 单字符串,带有“SELECT ml FROM MediaLibrary ml WHERE :id MEMBER OF ml.media.id” 2013 年 6 月 16 日下午 12:47:04 org.datanucleus.store.query.AbstractJPQLQuery compileInternal FINE:JPQL 查询:编译“SELECT ml FROM MediaLibrary ml WHERE:id MEMBER OF ml.media.id” 2013 年 6 月 16 日下午 12:47:04 com.xonami.rest.server.MyServerResource 日志 严重:com.xonami.rest.server.media.MediaStateNoIdResource 在日志中: org.datanucleus.exceptions.NucleusUserException:找不到类型(部分)ml.media.id,因为符号没有类型;隐式变量?:找不到(部分)ml.media.id 的类型,因为符号没有类型;隐式变量? 在 org.datanucleus.query.expression.PrimaryExpression.bind (PrimaryExpression.java: 274) 在 org.datanucleus.query.expression.InvokeExpression.bind (InvokeExpression.java: 97) 在 org.datanucleus.query.compiler.JavaQueryCompiler.compileFilter (JavaQueryCompiler.java: 475) 在 org.datanucleus.query.compiler.JPQLCompiler.compile (JPQLCompiler.java: 81) 在 org.datanucleus.store.query.AbstractJPQLQuery.compileInternal (AbstractJPQLQuery.java: 271) 在 org.datanucleus.store.mongodb.query.JPQLQuery.compileInternal (JPQLQuery.java: 163) 在 org.datanucleus.store.query.Query.setImplicitParameter (Query.java: 811) 在 org.datanucleus.api.jpa.JPAQuery.setParameter (JPAQuery.java: 438) 在 org.datanucleus.api.jpa.JPAQuery.setParameter (JPAQuery.java: 58) 在 com.xonami.rest.cache.DataFetcher.getMediaById (DataFetcher.java: 205)

更新

查询:SELECT ml FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id

2013 年 6 月 17 日上午 11:54:00 org.datanucleus.query.JPQLSingleStringParser FINE:JPQL 单字符串,带有“从 MediaLibrary ml 中选择 ml,Media m WHERE m MEMBER OF ml.media AND m.id = :id” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.query.AbstractJPQLQuery compileInternal FINE:JPQL 查询:编译“SELECT ml FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.query.AbstractJPQLQuery compileInternal FINE:JPQL 查询:编译时间 = 2 毫秒 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.query.AbstractJPQLQuery compileInternal 精细:查询编译: [来自:ClassExpression(别名=ml),ClassExpression(别名=m)] [过滤器:DyadicExpressionInvokeExpression[PrimaryExpressionml.media].contains(PrimaryExpressionm) AND DyadicExpressionPrimaryExpressionm.id = ParameterExpressionid] [符号:id type=java.lang.String,m type=com.xonami.rest.db.Media,ml type=com.xonami.rest.db.MediaLibrary] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.JPQLQuery compileQueryFull FINE:JPQL 查询:为数据存储编译“SELECT ml FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.QueryToMongoDBMapper compileFilter FINE:无法编译要在数据存储中完全评估的过滤器:此映射器不支持调用表达式 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.JPQLQuery compileQueryFull FINE:JPQL 查询:数据存储的编译时间 = 0 毫秒 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.query.AbstractJPQLQuery compileInternal FINE:JPQL 查询:编译“SELECT FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.util.Imports resolveClassDeclaration FINE:MediaLibrary 类被解析为 com.xonami.rest.db.MediaLibrary。它没有完全限定,因此必须查找;您可以通过完全限定查询中的类来避免查找(并提高性能)。 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.util.Imports resolveClassDeclaration FINE:Class Media 被解析为 com.xonami.rest.db.Media。它没有完全限定,因此必须查找;您可以通过完全限定查询中的类来避免查找(并提高性能)。 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.query.AbstractJPQLQuery compileInternal FINE:JPQL 查询:编译时间 = 1 毫秒 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.query.AbstractJPQLQuery compileInternal 精细:查询编译: [来自:ClassExpression(别名=ml),ClassExpression(别名=m)] [过滤器:DyadicExpressionInvokeExpression[PrimaryExpressionml.media].contains(PrimaryExpressionm) AND DyadicExpressionPrimaryExpressionm.id = ParameterExpressionid] [符号:id type=java.lang.String,m type=com.xonami.rest.db.Media,ml type=com.xonami.rest.db.MediaLibrary] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.JPQLQuery compileQueryFull FINE:JPQL 查询:为数据存储编译“SELECT FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.QueryToMongoDBMapper compileFilter FINE:无法编译要在数据存储中完全评估的过滤器:此映射器不支持调用表达式 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.JPQLQuery compileQueryFull FINE:JPQL 查询:数据存储的编译时间 = 0 毫秒 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.connection.ConnectionManagerImpl allocateConnection FINE:连接添加到池中:org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=null, commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=false] for key=org.datanucleus.ExecutionContextImpl@519549e 在工厂=ConnectionFactory:tx[org.datanucleus.store.mongodb.ConnectionFactoryImpl@4fb7a553] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl 获得NewConnection FINE:托管连接 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=false] 正在启动 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.JPQLQuery performExecute FINE:JPQL 查询:执行“SELECT FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id” ... 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.MongoDBUtils getObjectsOfCandidateType FINE:使用对集合 MediaLibrary 的查询执行 find() for fields= "mediaLibraryKey" : 1 , "owner" : 1 , "projectKey" : 1 , "quota" : 1 with filter= 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.LazyLoadQueryResult 关闭连接 信息:读入查询“SELECT FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id”的结果,因为使用的连接正在关闭 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl getObjectFromLevel1Cache 精细:对象“com.xonami.rest.db.MediaLibrary@774943d6”(id="com.xonami.rest.db.MediaLibrary:51bf3116b306d15598ec06c6")取自 1 级缓存 (loadedFlags="[NYYYY]") [缓存大小= 5] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.query.evaluator.JavaQueryEvaluator 执行 FINE:JPQL 查询:使用内存评估处理“过滤器”子句(clause = "DyadicExpressionInvokeExpression[PrimaryExpressionml.media].contains(PrimaryExpressionm) AND DyadicExpressionPrimaryExpressionm.id = 参数表达式id") 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.query.evaluator.JavaQueryEvaluator handleFilter FINE:为 1 个候选人评估过滤器 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.connection.ConnectionManagerImpl allocateConnection FINE:在池中找到连接:org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=true, closeOnTxnEnd=false] for key=org.datanucleus .ExecutionContextImpl@519549e in factory=ConnectionFactory:tx[org.datanucleus.store.mongodb.ConnectionFactoryImpl@4fb7a553] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.MongoDBPersistenceHandler fetchObject FINE:获取对象“com.xonami.rest.db.MediaLibrary@774943d6”(id=51bf3116b306d15598ec06c6)字段[媒体] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.MongoDBPersistenceHandler fetchObject FINE:从 MongoDB 检索对象“com.xonami.rest.db.MediaLibrary@774943d6”(id="51bf3116b306d15598ec06c6") 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.MongoDBUtils getObjectForObjectProvider FINE:检索对象 "_id" : "$oid" : "51bf3116b306d15598ec06c6" 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl putObjectIntoLevel1Cache FINE:对象“com.xonami.rest.db.Media@64afb650”(id="org.datanucleus.identity.IdentityReference@44cae5b8")添加到 1 级缓存(loadedFlags="[NNNNNNNNNNN]") 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField 精细:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“应用程序”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“applications”创建 SCO 包装器,包含 1 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“cTime”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField 精细:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“mediaStates”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“mediaStates”创建 SCO 包装器,包含 0 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField 精细:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“projectVLists”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“projectVLists”创建 SCO 包装器,包含 0 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“propertyKeys”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“propertyKeys”创建 SCO 包装器,包含 2 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“propertyValues”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“propertyValues”创建 SCO 包装器,包含 2 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“searchList”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“searchList”创建 SCO 包装器,包含 6 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")的字段“tags”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.ArrayList 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.Media@64afb650”字段“tags”创建 SCO 包装器,包含 2 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager wrapSCOField FINE:对象“com.xonami.rest.db.MediaLibrary@774943d6”(id="com.xonami.rest.db.MediaLibrary:51bf3116b306d15598ec06c6")的字段“media”中的值被 SCO 包装器替换 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.types.simple.HashSet 初始化 FINE:使用 options="cached,allowNulls" 为对象“com.xonami.rest.db.MediaLibrary@774943d6”字段“media”创建 SCO 包装器,包含 1 个条目 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.MongoDBPersistenceHandler fetchObject 精细:执行时间 = 4 毫秒 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl 发布 FINE:托管连接 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=false, closeOnTxnEnd=false] 正在提交 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl 发布 FINE:托管连接 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=false, closeOnTxnEnd=false] 提交的连接 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.AbstractStateManager updateLevel2CacheForFields 精细:对象“com.xonami.rest.db.MediaLibrary@774943d6”(id="51bf3116b306d15598ec06c6")正在更新二级缓存对象中的以下字段:[0] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator getValueForPrimaryExpression 严重:找不到 com.xonami.rest.db.MediaLibrary 的 m 成员 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.query.evaluator.memory.InMemoryExpressionEvaluator getValueForPrimaryExpression 严重:找不到 com.xonami.rest.db.MediaLibrary 的 m 成员 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.query.JPQLQuery performExecute FINE:JPQL 查询:执行时间 = 9 毫秒 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl 发布 FINE:托管连接 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=false, closeOnTxnEnd=false] 正在提交 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl 发布 FINE:托管连接 org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=false, closeOnTxnEnd=false] 提交的连接 2013 年 6 月 17 日上午 11:54:00 com.xonami.rest.LogWrapper 日志 信息:未找到。 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl performDetachOnClose FINE:DetachOnClose:关闭管理器,分离所有当前对象...... 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 分离 FINE:从持久性中分离对象:“com.xonami.rest.db.ProjectLibrary@9ec265c”(深度=0) 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField 精细:对象“com.xonami.rest.db.ProjectLibrary@9ec265c”(id="com.xonami.rest.db.ProjectLibrary:51bf3116b306d15598ec06c5")将字段“ownedProjects”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 分离 FINE:从持久性中分离对象:“com.xonami.rest.db.XonamiUser@397b6178”(深度=1) 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“creationDate”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 分离 FINE:从持久性中分离对象:“com.xonami.rest.db.EmailAddress@131b92e6”(深度=2) 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.EmailAddress@131b92e6”(id="com.xonami.rest.db.EmailAddress:51bf3117b306d15598ec06c8")将字段“created”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.LifeCycleState changeState FINE:对象“com.xonami.rest.db.EmailAddress@131b92e6”(id="com.xonami.rest.db.EmailAddress:51bf3117b306d15598ec06c8")有一个生命周期变化:“P_NONTRANS”->“DETACHED_CLEAN” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 断开连接 FINE:从 StateManager 断开 com.xonami.rest.db.EmailAddress@131b92e6 [pc=com.xonami.rest.db.EmailAddress@131b92e6,lifecycle=DETACHED_CLEAN] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl removeObjectFromLevel1Cache FINE:从 1 级缓存中删除 id="com.xonami.rest.db.EmailAddress:51bf3117b306d15598ec06c8" 的对象 [当前缓存大小 = 6] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“emails”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 分离 FINE:从持久性中分离对象:“com.xonami.rest.db.MediaLibrary@774943d6”(深度=2) 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 分离 FINE:从持久性中分离对象:“com.xonami.rest.db.Media@64afb650”(深度=2) 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField 精细:对象“com.xonami.rest.db.Media@64afb650”(id="")正在将字段“应用程序”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")将字段“cTime”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")将字段“mediaStates”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField 精细:对象“com.xonami.rest.db.Media@64afb650”(id="")将字段“projectVLists”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")将字段“propertyKeys”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")将字段“propertyValues”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField 精细:对象“com.xonami.rest.db.Media@64afb650”(id="")正在将字段“searchList”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.Media@64afb650”(id="")将字段“tags”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.LifeCycleState changeState FINE:对象“com.xonami.rest.db.Media@64afb650”(id="org.datanucleus.identity.IdentityReference@44cae5b8")有生命周期变化:“P_CLEAN”->“DETACHED_CLEAN” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl evictFromTransaction FINE:对象“com.xonami.rest.db.Media@64afb650”(id="org.datanucleus.identity.IdentityReference@44cae5b8")被从事务缓存中驱逐 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl evictFromTransaction FINE:对象“com.xonami.rest.db.Media@64afb650”(id="org.datanucleus.identity.IdentityReference@44cae5b8")不是事务性的 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 断开连接 FINE:从 StateManager 断开 com.xonami.rest.db.Media@64afb650 [pc=com.xonami.rest.db.Media@64afb650,生命周期=DETACHED_CLEAN] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl removeObjectFromLevel1Cache FINE:从 1 级缓存中删除 id="org.datanucleus.identity.IdentityReference@44cae5b8" 的对象 [当前缓存大小 = 5] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField 精细:对象“com.xonami.rest.db.MediaLibrary@774943d6”(id="com.xonami.rest.db.MediaLibrary:51bf3116b306d15598ec06c6")将字段“媒体”中的 SCO 包装器替换为未包装的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.LifeCycleState changeState 精细:对象“com.xonami.rest.db.MediaLibrary@774943d6”(id="com.xonami.rest.db.MediaLibrary:51bf3116b306d15598ec06c6")具有生命周期变化:“P_NONTRANS”->“DETACHED_CLEAN” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 断开连接 FINE:从 StateManager 断开 com.xonami.rest.db.MediaLibrary@774943d6 [pc=com.xonami.rest.db.MediaLibrary@774943d6,lifecycle=DETACHED_CLEAN] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl removeObjectFromLevel1Cache FINE:从 1 级缓存中删除 id="com.xonami.rest.db.MediaLibrary:51bf3116b306d15598ec06c6" 的对象 [当前缓存大小 = 4] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“mediaLibraries”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 分离 FINE:从持久性中分离对象:“com.xonami.rest.db.payment.PaymentInfo@6b04d3c8”(深度=2) 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.LifeCycleState changeState FINE:对象“com.xonami.rest.db.payment.PaymentInfo@6b04d3c8”(id="com.xonami.rest.db.payment.PaymentInfo:51bf3116b306d15598ec06c7")有一个生命周期变化:“P_NONTRANS”->“DETACHED_CLEAN” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 断开连接 FINE:从 StateManager 断开 com.xonami.rest.db.payment.PaymentInfo@6b04d3c8 [pc=com.xonami.rest.db.payment.PaymentInfo@6b04d3c8,lifecycle=DETACHED_CLEAN] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl removeObjectFromLevel1Cache FINE:从 1 级缓存中删除 id="com.xonami.rest.db.payment.PaymentInfo:51bf3116b306d15598ec06c7" 的对象 [当前缓存大小 = 3] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“paymentInfos”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField 精细:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“projectLibraries”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“propertyKeys”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“propertyValues”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“searchList”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager unwrapSCOField FINE:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")在字段“tags”中有 SCO 包装器" 替换为展开的值 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.LifeCycleState changeState 精细:对象“com.xonami.rest.db.XonamiUser@397b6178”(id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5")具有生命周期变化:“P_NONTRANS”- >“DETACHED_CLEAN” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 断开连接 FINE:从 StateManager 断开 com.xonami.rest.db.XonamiUser@397b6178 [pc=com.xonami.rest.db.XonamiUser@397b6178,生命周期=DETACHED_CLEAN] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl removeObjectFromLevel1Cache FINE:从 1 级缓存中删除 id="com.xonami.rest.db.XonamiUser:8f677878-ebde-4774-9604-5f78ba4844a5" 的对象 [当前缓存大小 = 2] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.LifeCycleState changeState FINE:对象“com.xonami.rest.db.ProjectLibrary@9ec265c”(id="com.xonami.rest.db.ProjectLibrary:51bf3116b306d15598ec06c5")有一个生命周期变化:“P_NONTRANS”->“DETACHED_CLEAN” 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.state.JDOStateManager 断开连接 FINE:从 StateManager 断开 com.xonami.rest.db.ProjectLibrary@9ec265c [pc=com.xonami.rest.db.ProjectLibrary@9ec265c,生命周期=DETACHED_CLEAN] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl removeObjectFromLevel1Cache FINE:从 1 级缓存中删除 id="com.xonami.rest.db.ProjectLibrary:51bf3116b306d15598ec06c5" 的对象 [当前缓存大小 = 1] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl performDetachOnClose FINE: DetachOnClose : 完成分离 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.connection.ConnectionManagerImpl closeAllConnections FINE:在池中找到连接:org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=false, closeOnTxnEnd=false] for key=org.datanucleus .ExecutionContextImpl@519549e in factory=ConnectionFactory:tx[org.datanucleus.store.mongodb.ConnectionFactoryImpl@4fb7a553] 但所有者对象关闭所以关闭连接 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.store.connection.ConnectionManagerImpl$1 managedConnectionPostClose FINE:从池中删除连接:org.datanucleus.store.mongodb.ConnectionFactoryImpl$ManagedConnectionImpl@517c804b [conn=com.mongodb.DBApiLayer@61ffbcb, commitOnRelease=true, closeOnRelease=false, closeOnTxnEnd=false] for key=org.datanucleus .ExecutionContextImpl@519549e in factory=ConnectionFactory:tx[org.datanucleus.store.mongodb.ConnectionFactoryImpl@4fb7a553] 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl disconnectObjectProvidersFromCache FINE:一级缓存已清除 2013 年 6 月 17 日上午 11:54:00 org.datanucleus.ExecutionContextImpl 关闭 FINE:ExecutionContext“org.datanucleus.ExecutionContextImpl@519549e”关闭 2013 年 6 月 17 日上午 11:54:00 org.restlet.service.ConverterService toRepresentation

【问题讨论】:

您引用的查询是无效的 JPQL,因此请使用有效的查询以及从该有效 JPQL 查询获得的完整错误消息和堆栈跟踪来更新问题。然后引用日志中关于 JPQL 调用的内容(在 DEBUG 级别!) 也许我的日志输出有问题,但在 DEBUG 中没有出现任何其他问题,所以我用 ALL 级别的输出和不同的查询进行了更新。 仍然无效的查询。 ":media MEMBER OF m1.media" 是一个有效的结构。 我不明白您的问题。我没有m1。您能否建议一个与我正在尝试执行的 mongo db 查询等效的 JPA 查询? 我只是复制你的名字,并提供一些有效的东西......你可以通过查看 JPA 规范轻松地做到这一点。如果你想指定一个 id 然后 "SELECT ml FROM MediaLibrary ml, Media m WHERE m MEMBER OF ml.media AND m.id = :id" 【参考方案1】:

FINE:要在数据存储中完全评估的过滤器编译 不可能:此映射器不支持调用表达式

因此,目前尚未实现将 JPQL“collField.contains(val)”(相当于您为查询键入的内容)转换为 MongoDB 查询,因此无法在数据存储中对其进行评估。由于您知道它需要转换成什么,因此您可以轻松获得 the code for the DataNucleus MongoDB plugin 并找到 class QueryToMongoDBMapper 并为该特定查询提供支持。

【讨论】:

以上是关于带有嵌入式类型查询的 Mongo/DataNucleus/JPA 给出:找不到(部分)的类型...因为符号没有类型;隐式变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 查询配置 jOOQ 可嵌入类型

查询 Mongoid/rails 3 中的嵌入对象(“低于”、Min 运算符和排序)

如何从具有执行类型作为嵌入式查询的 Control-M 数据库作业运行 SQL Developer 中存在的存储过程

Spring Data Neo4j (4.2.0M1) 计数 Cypher 查询返回类型不同于嵌入式数据库而不是远程数据库

使用带有嵌入式 Tomcat 的 Spring Boot Weblfux

带有官方 Graphql 教程的“无法在 CreateUser 类型上查询字段 'id'”