2013-09-04 2 views
1

Я попытался построить базовый пример запроса ad hoc на основе A basic ad hoc query example .Playorm java.lang.Integer не может быть отнесен к java.math.BigInteger

Но я не могу вставить Целочисленное значение. Я думаю, что это из-за этого куска кода:

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

Мой код:

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

} 

Там нет возможности вернуться Integer.class. Таким образом, он не может построить 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 
+0

Что именно ваш код выглядит? – Easility

+0

да, нам нужен пример, который вы используете. У нас около 110 единичных тестов и много этих целых чисел. Я предполагаю, что это ошибка пользователя, но нам нужно добавить лучшее исключение, например «Пользователь сделал это неправильно или что-то», чтобы следующий человек не нуждался в отладке проблемы. –

+0

Хорошо. Код выше. Это неправильно? –

ответ

0

TypedRow это специальный апи и сейчас позволяет BigInteger, BigDecimal и строковые типы ..... Эти типы, однако при хранении сохраняются как можно наименьшие байтов поэтому значение int 10 хранится как один байт.

из любопытства, почему бы не использовать класс MyEntity.java, аннотированный с помощью @NoSqlEntity? В вашем случае использование POJO показалось бы более полезным.

MyEntity.java может иметь какие-либо примитивные типы, INT, двойной и т.д. и т.п.

Мы думали, что вы использовали сущности, как наиболее использовать объекты, чтобы сделать разработку более быстрой.

позже, Дин

+0

Я не знаю, какие атрибуты вам понадобится классу. Я хотел бы создать семейство столбцов динамически, когда пожелает пользователь приложения. Могу ли я создать семейство столбцов таким образом, используя POJO? –

+0

Иногда я использую @NoSqlEmbedded приватную карту в моем pojo, поскольку я знаю «часть» моего семейства столбцов, правильно? Это выполнимо, и я думаю, что некоторые пользователи использовали список @ ListSyncNeBeded private List ; (оба из них помещают все эти данные в вашу строку, но не точно предопределены) –

+0

в случае, если вам было любопытно, если у меня есть личная карта myMap; и я храню ключи a и b и c, тогда имена столбцов становятся «myMap». «a» и «myMap». «b» и «myMap». «c» и т. д. и т. д. и т. д. Значения естественно значения .... вы можете предоставить свой собственный конвертер, если у вас есть сложные типы для значения (и я думаю, что и для названия тоже), хотя я не экспериментировал с этим –

Смежные вопросы