Spring data mongoDB 保存不完整的 java Bitset 对象



我正在java中使用mongoDB。我想将java Bitset对象保存在数据库中,并且由于只有BSON本机类型可以从Java对应项转换,因此我必须使用映射器库。

我使用了Mongo Morphia Mapper并成功保存了Bitset对象。但是我需要使用Spring Data MongoDB库做同样的事情。但是使用 spring 库 Bitset 对象不会保存,保存时也没有错误。当我检索相同的对象时,我得到空的双集对象。 以下是分别使用Morphia和Spring将数据保存在mongo数据库中的方式:

吗啡

    { "_id" : "testid", "name" : "spring", "bit" : { "words" :
  1. [ NumberLong(132) ], "wordsInUse" : 1, "sizeIsSticky" : true } }

春天

    { "_id" : "testid", "name" : "spring", "bit" :
  1. { "words" : [ NumberLong(132) ] } }

通过比较这两个,我注意到使用弹簧的Biset信息没有完全保存(粗体部分)。这可能是位集对象为空的原因。我正在使用"spring-data-mongodb-1.0.0.M4.jar"进行保存。请谁能说出我错在哪里。我将不胜感激你的帮助。

谢谢

舒布拉


@Asya 卡姆斯基

以下是我用来使用 spring 保存的代码:

BitSet b = new BitSet(10);  
b.set(2);  
b.set(7);
MyClass myclass = new MyClass("testid","spring",b);
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class); 
MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate"); 
mongoOperation.save(myclass);

您看到此行为的原因是 Spring 数据映射子系统将瞬态字段视为不持久化(相关代码在 AbstractPersistenProperty.isTransient() 中)。我已经提交了一个JIRA问题,并针对Spring Data Commons的1.3.x和1.4.x分支实施和部署了一个修复程序。您已经可以通过引用任一分支的快照版本来使用它。

最新更新