mongodb存储java对象_java – Spring数据Mongodb存储库没有正确实现继承

我遇到了同样的问题.

看看源代码,令我惊讶的是它有点没有实现.它添加了Collection名称和实体类,但未在最终查询中插入_class属性.

在看了之后我意识到Mongo将如何知道从SuperClass派生的SubClass1或Subclass2.

所以我只是覆盖SimpleMongoRepository类并创建我自己的Factory,它放置该类而不是默认的SimpleMongoRepository

我在这里添加了:

public MySimpleMongoRepository(MongoEntityInformation metadata, MongoOperations mongoOperations) {

Assert.notNull(mongoOperations);

Assert.notNull(metadata);

this.entityInformation = metadata;

this.mongoOperations = mongoOperations;

Reflections reflections = new Reflections("com.cre8techlabs.entity");

Set subTypes = reflections.getSubTypesOf(entityInformation.getJavaType()).stream().map(Class::getName).collect(Collectors.toSet());

subTypes.add(entityInformation.getJavaType().getName());

this.baseClassQuery = Criteria.where("_class").in(subTypes.toArray());

}

这里是一个实现find的例子

public T findOne(ID id) {

Assert.notNull(id, "The given id must not be null!");

Query q = getIdQuery(id).addCriteria(baseClassQuery);

return mongoOperations.findOne(q, entityInformation.getJavaType(), entityInformation.getCollectionName());

}

它适用于我,我只是担心需要更长的时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值