我正在java中使用mongoDB。我想将java Bitset对象保存在数据库中,并且由于只有BSON本机类型可以从Java对应项转换,因此我必须使用映射器库。
我使用了Mongo Morphia Mapper并成功保存了Bitset对象。但是我需要使用Spring Data MongoDB库做同样的事情。但是使用 spring 库 Bitset 对象不会保存,保存时也没有错误。当我检索相同的对象时,我得到空的双集对象。 以下是分别使用Morphia和Spring将数据保存在mongo数据库中的方式:
吗啡
- { "_id" : "testid", "name" : "spring", "bit" : { "words" :
- [ NumberLong(132) ], "wordsInUse" : 1, "sizeIsSticky" : true } }
春天
- { "_id" : "testid", "name" : "spring", "bit" :
- { "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分支实施和部署了一个修复程序。您已经可以通过引用任一分支的快照版本来使用它。