2017-08-02 50 views
1

我正在使用Kundera JPA for Cassandra。昆德拉的版本是:3.8Kundera Cassandra JPQL與複合鍵

這裏是我的實體定義: -

@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 = "[email protected]_pu") 
public class MyEntity 
{ 
    @EmbeddedId 
    private CompoundKey primaryKey; 

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

下面是用於檢索的片段: -

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 
); 

如果我用一個簡單的實體,而不復合鍵查詢只是正常工作。我錯過了什麼?

更新:當我刪除評論屬性它工作正常。

+1

可用,我們將盡快添加修復,讓你知道 –

回答

1

此問題已修復!

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

這是昆德拉3.10

+0

非常感謝。我試圖通過主幹構建來驗證修復。獲得以下例外。 [main] ERROR org.springframework.boot.SpringApplication - 應用程序啓動失敗 java.lang.NoSuchMethodError:org.apache.cassandra.serializers.ListSerializer.deserializeForNativeProtocol(Ljava/nio/ByteBuffer; I)Ljava/util/List; \t在com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollectionList(CassandraDataHandlerBase.java:1735) \t在com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollection(CassandraDataHandlerBase.java:1576) – TechEnthusiast

+0

解決的上述通過添加舊版本的cassandra-all來例外。這是一個已知的問題?此外,現在正在獲取以下異常javax.persistence.PersistenceException:java.lang.ClassCastException:org.apache.cassandra.cql3.FieldIdentifier不能轉換爲java.nio.ByteBuffer。可能是什麼原因?使用的查詢:「從MyEntity實體中選擇實體」 – TechEnthusiast

+1

@TechEnthusiast,您可以在[gitter](https://gitter.im/impetus-opensource/Kundera)與我們聊天。 –