Hibernate OGM - java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1

Posted

技术标签:

【中文标题】Hibernate OGM - java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1【英文标题】:Hibernate OGM - java.lang.StringIndexOutOfBoundsException: String index out of range: -1 【发布时间】:2019-05-22 20:00:34 【问题描述】:

我无法使用内部 id 在 JPQL 中检索此文档


    "_id" : 
        "activity_id" : NumberLong(1),
        "id" : NumberLong(629364456)
    ,
    "date" : ISODate("2018-12-22T23:41:22.951Z"),
    "sys_date" : ISODate("2018-12-22T23:41:22.951Z"),
    "disable_revision" : 0,
    "type" : "myMongoEvent",
    "title" : "ref title",
    "revision" : "0.0",
    "freeze" : false,
    "user_id" : 0,
    "syncdate" : ISODate("2018-12-22T23:41:22.951Z"),
    "undelable" : 0,
    "username" : ""

查询:

Query query = entitymanager.createQuery("SELECT e.title FROM Event e WHERE e.id.id=:id");
query.setParameter("id",2046229248L);
List results = query.getResultList();

如果我查询像 title 这样的纯字符串字段,它会起作用。

如果我使用复合索引的 id 查询则不会(我需要复合索引)。

即使我查询不存在的title,我也会收到错误java.lang.StringIndexOutOfBoundsException: String index out of range: -1..我应该只是得到空结果,为什么会抛出异常?

【问题讨论】:

【参考方案1】:

本例中的问题是 OGM 中的错误。当 @Column 注释用于嵌入 id 的属性时会发生这种情况。在这种情况下,对该字段的查询将导致异常。

A fix has been provided,它将在下一个版本中提供。

【讨论】:

以上是关于Hibernate OGM - java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1的主要内容,如果未能解决你的问题,请参考以下文章

休眠 OGM Neo4j (5.0) Wildfly 10 错误。提供者 org.hibernate.ogm.service.impl.OgmIntegrator 不是子类型

使用Hibernate OGM和云MongoDB Atlas M0(免费层)

Hibernate OGM聚合查询的结果

Hibernate OGM映射本地查询的@Embeddable对象

使用 Hibernate OGM 的 MongoDb 身份验证

Hibernate OGM 映射本机查询的@Embeddable 对象