【问题标题】:Kundera Cassandra JPQL with Compound Key带有复合键的昆德拉卡桑德拉 JPQL
【发布时间】:2018-01-10 01:43:52
【问题描述】:

我正在为 Cassandra 使用 Kundera JPA。昆德拉版本是:3.8

这是我的实体定义:-

@Embeddable
public class PartitionKey implements Serializable
{
    @Column(name = "ID")
    private String Id;

    @Column (name = "TYPE")
    private String Type;
}

@Embeddable
public class CompoundKey implements Serializable
{
    @Embedded
    private PartitionKey partitionKey;
    @Column(name = "LABEL")
    private String label;
}

@Embeddable
public class Comment
{
    @Column(name="comment")
    private String comment;
}

@Entity
@Table(name = "MY_ENTITY", schema = "xyz@cassandra_pu")
public class MyEntity
{
    @EmbeddedId
    private CompoundKey primaryKey;

    @ElementCollection
    @Column(name = "COMMENTS")
    private List<Comments> comments;
}

这里是用于检索的sn-p:-

Query q = entityManager.createQuery("Select e from MyEntity e where e.primaryKey.partitionKey.Id = :Id and e.primaryKey.partitionKey.Type = :Type");
    q2.setParameter("Id", "ID1");
    q2.setParameter("Type", "BOOK");
    List<MyEntity> list=q2.getResultList();

我得到了上述的空指针异常:-

java.lang.NullPointerException: null
    at         com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementC    ollection(CassandraDataHandlerBase.java:1566) ~[kundera-cassandra-    3.9.1.jar:na]
    at     com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateVia    Thrift(CassandraDataHandlerBase.java:1154) ~[kundera-cassandra-    3.9.1.jar:na]
    at     com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(Ca    ssandraDataHandlerBase.java:1054) ~[kundera-cassandra-3.9.1.jar:na]
    at     com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEnt    ity(CassandraDataHandlerBase.java:653) ~[kundera-cassandra-3.9.1.jar:na]
    ... 15 common frames omitted

这是我的表创建脚本:-

create TABLE "MY_ENTITY"
(
    "ID" TEXT,
    "TYPE" TEXT,
    "LABEL" TEXT,
    "COMMENTS" list<frozen <"COMMENT">>,
    PRIMARY KEY("ID","TYPE","LABEL")
);

评论用户定义类型定义是:-

CREATE TYPE "COMMENT" (
    comment text
);

如果我使用没有复合键的简单实体,查询就可以正常工作。我错过了什么吗?

更新:当我删除 cmets 属性时,它工作正常。

【问题讨论】:

  • 我们会尽快添加修复并通知您

标签: jpa orm cassandra jpql kundera


【解决方案1】:

这个问题已经解决了!

https://github.com/impetus-opensource/Kundera/issues/953

在昆德拉 3.10 中可用

【讨论】:

  • 非常感谢。我尝试构建主干以验证修复。我收到以下异常。 [main] 错误 org.springframework.boot.SpringApplication - 应用程序启动失败 java.lang.NoSuchMethodError: org.apache.cassandra.serializers.ListSerializer.deserializeForNativeProtocol(Ljava/nio/ByteBuffer;I)Ljava/util/List;在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollectionList(CassandraDataHandlerBase.java:1735) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollection(CassandraDataHandlerBase.java:1576)
  • 通过添加旧版本的 cassandra-all 解决了上述异常。这是一个已知的问题?另外现在得到以下异常 javax.persistence.PersistenceException: java.lang.ClassCastException: org.apache.cassandra.cql3.FieldIdentifier 不能转换为 java.nio.ByteBuffer。可能是什么原因?使用的查询:“从 MyEntity 实体中选择实体”
  • @TechEnthusiast 您可以通过gitter与我们聊天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
相关资源
最近更新 更多