【问题标题】:Kundera with Datastax DS-Driver complains "field" is not a field defined in UDT使用 Datastax DS-Driver 的昆德拉抱怨“字段”不是 UDT 中定义的字段
【发布时间】:2017-07-07 10:43:37
【问题描述】:

我将 Kundera-Cassandra 与 Kundera-Cassandra-ds-driver 一起使用,两者都是 3.7 版。 H 有一个嵌套对象结构要持久化到 Cassandra 中。

对象被正确持久化并且 find() 返回正确的结果。 但是,在运行简单查询时,它会返回“ava.lang.IllegalArgumentException: is not a field defined in this UDT”。

    9:11:16.834 [main] INFO  com.impetus.kundera.query.QueryImpl - On getResultList() executing query: Select p from Person p
    09:11:16.834 [main] DEBUG c.i.client.cassandra.query.CassQuery - Populating entities for Cassandra query Select p from Person p.
    Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.219 sec <<< FAILURE! - in com.abc.KunderaTest
    test(com.abc.KunderaTest)  Time elapsed: 2.101 sec  <<< ERROR!
    java.lang.IllegalArgumentException: lastName is not a field defined in this UDT
            at com.datastax.driver.core.UDTValue.getAllIndexesOf(UDTValue.java:49)
            at com.datastax.driver.core.AbstractData.getIndexOf(AbstractData.java:66)
            at com.datastax.driver.core.AbstractGettableData.isNull(AbstractGettableData.java:55)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClientUtilities.setBasicValue(DSClientUtilities.java:459)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClientUtilities.setUDTValue(DSClientUtilities.java:431)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClientUtilities.assign(DSClientUtilities.java:393)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClient.iteratorColumns(DSClient.java:909)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClient.populateObjectFromRow(DSClient.java:803)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClient.iterateAndReturn(DSClient.java:792)
            at com.impetus.kundera.client.cassandra.dsdriver.DSClient.executeQuery(DSClient.java:531)
            at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:146)
            at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377)
            at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200)
            at com.impetus.kundera.query.KunderaTypedQuery.getResultList(KunderaTypedQuery.java:250)

这是我正在运行的查询:

    Query query = em.createQuery("Select p from Person p", Person.class);
    List<Person> persons = query.getResultList();

Person.java

    @Entity
    @Table(name = "PERSON")
    public class Person implements Serializable {

        @Id
        @Column
        public String personId;

        @Embedded
        public Name name;

        @ElementCollection
        public List<Address> addresses = new ArrayList<Address>();

        @Column
        public int age;
    }

名称.java

    @Embeddable
    public class Name implements Serializable {
        @Column
        public String firstName;
        @Column
        public String lastName;
    }

地址.java

    @Embeddable
    public class Address implements Serializable {
        @Column
        public String city;
        @Column
        public String country;
    }

Cassandra CQLSH 在创建的表上:

    CREATE TYPE mykeyspaces."Address" (
        country text,
        city text
    );

    CREATE TYPE mykeyspaces."Name" (
        "firstName" text,
        "lastName" text
    );

    CREATE TABLE mykeyspaces."PERSON" (
        "personId" text PRIMARY KEY,
        addresses list<frozen<"Address">>,
        age int,
        name frozen<"Name">
    ) 

Thrift 可以正常工作,但 DS-Driver 不行。 如果我遗漏了什么,请告诉我。

谢谢!

【问题讨论】:

    标签: java cassandra datastax-java-driver kundera


    【解决方案1】:

    我已经调试了代码,这似乎是 datastax 驱动程序中的一个错误。

    错误:获取具有 case-sensitive 名称的 UDT 列

    您现在可以使用firstnamelastname 之类的解决方法。

    以下作品:

    @Embeddable
    public class Name implements Serializable {
        @Column(
        public String firstname;
        @Column
        public String lastname;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-11
      • 2016-09-19
      • 2019-12-08
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多