带有嵌入式类型查询的 Mongo/DataNucleus/JPA 给出:找不到(部分)的类型...因为符号没有类型;隐式变量? Posted 2023-04-19
技术标签:
【中文标题】带有嵌入式类型查询的 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'”