0

我在java中的mongoDB中工作。我想将 java Bitset Object 保存在 db 中,因为只有 BSON 本机类型可以从它们的 Java 对应类型转换,所以我必须使用映射器库。

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

吗啡

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

春天

  1. {“_id”:“testid”,“名称”:“弹簧”,“位”:{“单词”:[NumberLong(132)]} }

通过比较两者,我注意到使用弹簧的 Biset 信息没有完全保存(粗体部分)。这可能是空位集对象的原因。我正在使用“spring-data-mongodb-1.0.0.M4.jar”进行保存。请任何人都可以告诉我哪里错了。我会很感激你的帮助。

谢谢

舒布拉


@Asya Kamsky

下面是我用来保存使用 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);
4

1 回答 1

0

您看到这种行为的原因是 Spring Data Mapping 子系统认为瞬态字段不会被持久化(相关代码在 中AbstractPersistenProperty.isTransient())。我已经提交了一个JIRA 问题,并针对 Spring Data Commons 的1.3.x1.4.x分支实施并部署了一个修复程序。您已经可以通过参考任一分支的快照版本来使用它。

于 2012-06-06T10:44:55.327 回答