简体   繁体   English

Playorm java.lang.Integer无法强制转换为java.math.BigInteger

[英]Playorm java.lang.Integer cannot be cast to java.math.BigInteger

I tried to construct a basic ad hoc query example based on A basic ad hoc query example . 我试图根据一个基本的临时查询示例构建一个基本的临时查询示例

But, I can't insert a Integer value. 但是,我无法插入整数值。 I think it is because of this piece of code: 我认为是因为这段代码:

private Class getStorageTypeAsClass() {
    switch (getStorageType())
    {
        case STRING:
            return String.class;
        case INTEGER:
            return BigInteger.class;
    }
}

My code: 我的代码:

package playorm;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

import com.alvazan.orm.api.base.Bootstrap;
import com.alvazan.orm.api.base.DbTypeEnum;
import com.alvazan.orm.api.base.NoSqlEntityManager;
import com.alvazan.orm.api.base.NoSqlEntityManagerFactory;
import com.alvazan.orm.api.z3api.NoSqlTypedSession;
import com.alvazan.orm.api.z8spi.KeyValue;
import com.alvazan.orm.api.z8spi.meta.DboColumnCommonMeta;
import com.alvazan.orm.api.z8spi.meta.DboColumnIdMeta;
import com.alvazan.orm.api.z8spi.meta.DboDatabaseMeta;
import com.alvazan.orm.api.z8spi.meta.DboTableMeta;
import com.alvazan.orm.api.z8spi.meta.TypedColumn;
import com.alvazan.orm.api.z8spi.meta.TypedRow;

public class PlayOrm {
    private static NoSqlEntityManager mgr;

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void main(String[] args) {

        Map properties = new HashMap();
        properties.put(Bootstrap.AUTO_CREATE_KEY, "create");

        String clusterName = "Test Cluster";
        String seeds = "localhost:9160";
        String keyspace = "nosql";

        Bootstrap.createAndAddBestCassandraConfiguration(properties, clusterName, keyspace, seeds);
        NoSqlEntityManagerFactory factory = Bootstrap.create(DbTypeEnum.CASSANDRA, properties,null,null);
        mgr = factory.createEntityManager();
        DboDatabaseMeta metaDb = mgr.find(DboDatabaseMeta.class,
                DboDatabaseMeta.META_DB_ROWKEY);
        DboTableMeta meta = new DboTableMeta();
        meta.setup(null, "MyEntity", false);
        metaDb.addMetaClassDbo(meta);

        DboColumnIdMeta idMeta = new DboColumnIdMeta();
        idMeta.setup(meta, "idField", String.class, true);
        mgr.put(idMeta);

        DboColumnCommonMeta fieldDbo = new DboColumnCommonMeta();
        fieldDbo.setup(meta, "firstname", String.class, true, false);
        mgr.put(fieldDbo);
        DboColumnCommonMeta fieldDbo2 = new DboColumnCommonMeta();
        fieldDbo2.setup(meta, "lastname", Integer.class, true, false);
        mgr.put(fieldDbo2);

        mgr.put(meta);
        mgr.flush();

        NoSqlTypedSession session = mgr.getTypedSession();
        for (int i = 0; i < 10000; i++) {
            TypedRow typedRow = session.createTypedRow("MyEntity");
            typedRow.addColumn("firstname", "harry");
                        //**THE PROBLEM**
            typedRow.addColumn("lastname", new Integer(i));
            typedRow.setRowKey(UUID.randomUUID().toString());

            session.put("MyEntity", typedRow);

            if(i > 1000 && (i % 10) == 0 ){
                session.flush();
                mgr.clear();
            }

        }
        session.flush();

}

There is no option to return Integer.class. 没有返回Integer.class的选项。 So, it can't construct a Integer converter: 因此,它不能构造一个Integer转换器:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.alvazan.orm.impl.meta.data.NoSqlProxyImpl.invoke(NoSqlProxyImpl.java:96)
    at com.alvazan.orm.api.z8spi.meta.DboColumnCommonMeta_$$_javassist_1.convertToStorage2(DboColumnCommonMeta_$$_javassist_1.java)
    at com.alvazan.orm.api.z8spi.meta.TypedRow.addColumn(TypedRow.java:99)
    at playorm.PlayOrm.main(PlayOrm.java:62)
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigInteger
    at com.alvazan.orm.api.z8spi.conv.Converters$BigIntegerConverter.convertToNoSqlImpl(Converters.java:89)
    at com.alvazan.orm.api.z8spi.conv.Converters$BaseConverter.convertToNoSql(Converters.java:138)
    at com.alvazan.orm.api.z8spi.meta.DboColumnMeta.convertToStorage2(DboColumnMeta.java:167)
    at com.alvazan.orm.api.z8spi.meta.DboColumnCommonMeta_$$_javassist_1._d8convertToStorage2(DboColumnCommonMeta_$$_javassist_1.java)
    ... 8 more

TypedRow is a special api and allows BigInteger, BigDecimal and String types right now.....These types however when stored are stored as the lowest bytes possible so an int value of 10 is stored as one byte. TypedRow是一种特殊的api,现在允许BigInteger,BigDecimal和String类型.....但是,这些类型在存储时会以最低字节的形式存储,因此int值10将作为一个字节存储。

out of curiosity, why not use a MyEntity.java class annotated with @NoSqlEntity instead??? 出于好奇,为什么不使用带有@NoSqlEntity注释的MyEntity.java类呢? In your case, using a POJO would seem more beneficial. 在您的情况下,使用POJO似乎更有利。

MyEntity.java can have any primitive types, int, double, etc. etc. MyEntity.java可以具有任何原始类型,例如int,double等。

We thought you were using the entities as most use the entities to make development faster. 我们认为您正在使用实体,因为大多数人都使用实体来加快开发速度。

later, Dean 后来院长

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.Integer不能强制转换为java.math.BigInteger - java.lang.Integer cannot be cast to java.math.BigInteger java.math.BigInteger 不能转换为 java.lang.Integer - java.math.BigInteger cannot be cast to java.lang.Integer 如何解决 java.math.BigInteger 无法转换为 java.lang.Integer? - How to work around java.math.BigInteger cannot be cast to java.lang.Integer? 如何解决 java.math.BigInteger 无法转换为 java.lang.Integer - How to work around java.math.BigInteger cannot be cast to java.lang.Integer java.math.BigInteger 不能强制转换为 java.lang.Integer,ZAC5C24B64B4BAC83 - java.math.BigInteger cannot be cast to java.lang.Integer , sql Dialect is not configured java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.math.BigInteger HTTP状态500 - java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigInteger HTTP Status 500 java.math.BigInteger 无法转换为 java.lang.Long - java.math.BigInteger cannot be cast to java.lang.Long java.lang.Long无法强制转换为java.math.BigInteger - java.lang.Long cannot be cast to java.math.BigInteger java.lang.ClassCastException:java.math.BigInteger无法强制转换为java.lang.Long - java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long java.math.BigInteger无法强制转换为java.math.BigDecimal - java.math.BigInteger cannot be cast to java.math.BigDecimal
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM