当持久化实体时,NullPointer与playOrm 1.4.1

时间:2012-11-09 20:30:21

标签: orm nosql playorm

我在playORM中映射了实体,我的项目运行正常,我的实体按照它们的方式映射。但是,在安装了maven发布的最新版本的playORM 1.4.1之后,我得到了空指针。

我想找到错误,但不知道从哪里开始寻找。

任何提示?

信息:找到meta =本地用户 2012-11-09 17:32:22,918 com.alvazan.orm.layer9z.spi.db.cassandra.ColumnFamilyHelper waitForNodesToBeUpToDate 信息:循环,直到所有节点具有相同的模式版本或超时300000毫秒 2012-11-09 17:32:22,939 com.alvazan.orm.layer9z.spi.db.cassandra.ColumnFamilyHelper tryToLoadColumnFamilyImpl 信息:好吧,我们没有找到任何列系列=用户加载cassandra(来自virt = User) 2012-11-09 17:32:22,939 com.alvazan.orm.layer9z.spi.db.cassandra.ColumnFamilyHelper tryToLoadColumnFamilyVirt 信息:来自cassandra = 21的LOAD列族元的总时间 显示java.lang.NullPointerException     at com.alvazan.orm.impl.meta.data.MetaEmbeddedSimple.translateToColumnImpl(MetaEmbeddedSimple.java:105)     at com.alvazan.orm.impl.meta.data.MetaEmbeddedSimple.translateToColumn(MetaEmbeddedSimple.java:93)     在com.alvazan.orm.impl.meta.data.MetaClassSingle.translateToRow(MetaClassSingle.java:82)     at com.alvazan.orm.layer0.base.BaseEntityManagerImpl.putImpl(BaseEntityManagerImpl.java:102)     在com.alvazan.orm.layer0.base.BaseEntityManagerImpl.put(BaseEntityManagerImpl.java:68)     在com.s1mbi0se.dmp.da.dao.UserDao.insertOrUpdateUser(UserDao.java:23)     at com.s1mbi0se.dmp.module.UserModule.persistData(UserModule.java:116)     at com.s1mbi0se.dmp.processor.mapred.SelectorReducer.reduce(SelectorReducer.java:60)     at com.s1mbi0se.dmp.processor.mapred.SelectorReducer.reduce(SelectorReducer.java:1)     在org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:176)     在org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:649)     在org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)     在org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:260) 17:32:22,946 WARN Thread-3 mapred.LocalJobRunner:298 - job_local_0001 java.lang.InterruptedException     at com.s1mbi0se.dmp.processor.mapred.SelectorReducer.reduce(SelectorReducer.java:63)     at com.s1mbi0se.dmp.processor.mapred.SelectorReducer.reduce(SelectorReducer.java:1)     在org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:176)     在org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:649)     在org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)     在org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:260) 2012-11-09 17:32:27,237 com.s1mbi0se.dmp.processor.main.DmpProcessorRunner run

2 个答案:

答案 0 :(得分:2)

编辑:这在主分支中已修复,很快就会被释放。 12年11月27日

日志格式似乎有点偏,但这是重要的部分

java.lang.NullPointerException at com.alvazan.orm.impl.meta.data.MetaEmbeddedSimple.translateToColumnImpl(MetaEmbeddedSimple.java:105)

第105行找到此代码......

    for(T val : toBeAdded) {
        byte[] name = formTheName(val);
        Column c = new Column();
        c.setName(name);

        row.getColumns().add(c);
    }

特别是第105行是第一行,所以toBeAdded由于某种原因是空的....看看谁调用了这个方法。

嗯,事实证明你的一个实体有一个空列表。我们需要在这里添加代码,所以如果你的实体有一个空列表,我们就会创建一个空列表。您可以提交票证并链接到此URL。我们可以轻松解决这个问题。

注意:我习惯每个实体都有这样的字段

私人列表;

我100%总是像这样定义

private List something = new ArrayList();

这避免了Nullpointers遍布这个地方,这就是为什么我错过了这个:( :(不管怎样,我们将修复允许这个空列表。

感谢, 迪安

答案 1 :(得分:1)

这已在版本1.4.2中修复,该版本可在Maven repo中找到