【发布时间】:2019-06-19 21:19:41
【问题描述】:
我一直在尝试但未能模仿Baeldung article 的演练如何触发“子”上的保存:通过 Spring Boot 的 @DBRef 注释“包含”在另一个实体中的实体。就我而言,我正在尝试从客户那里 DBRef 一个地址(子)。
我发布了我的简要配置文件以及可疑代码,因为我不知道它是否格式错误。
我怀疑错误的代码位于 src > main > java > foo.bar 下名为“CustomerCascadeSaveMongoEventListener.java”的类中,如下所示:
@Override
public class CustomerCascadeSaveMongoEventListener extends AbstractMongoEventListener {
@Autowired
private MongoOperations mongoOperations;
@Override
public void onBeforeConvert(BeforeConvertEvent<Object> event) {
Object source = event.getSource();
if ((source instanceof Customer) && (((Customer) source).getAddress() != null)) {
mongoOperations.save(((Customer) source).getAddress());
}
}
}
IntelliJ red-squiggles @Override 不覆盖和方法签名,原因与错误消息相同。
由于不知道还能叫什么,我的 XML 文件名为“cascade.properties”,位于 src > main > java > foo.bar > resources 下,如下所示:
<mongo:mongo-client id="mongoClient" host="localhost" />
<mongo:db-factory id="mongoDbFactory" dbname="test" mongo-ref="mongoClient" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoDbFactory"/>
</bean>
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean class="org.baeldung.event.CustomerCascadeSaveMongoEventListener" />
最后,在我的 Customer 类中,引用地址的字段如下所示:
@DBRef
@NotNull
private Address address;
主要错误信息如下:
错误:(16, 17) java: 名称冲突: onBeforeConvert(org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent) 在 io.catalyte.training.CustomerCascadeSaveMongoEventListener 和 onBeforeConvert(org.springframework.data. org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener 中的 mongodb.core.mapping.event.BeforeConvertEvent) 具有相同的擦除,但都不会覆盖另一个
我认为解决该问题也将消除第二条错误消息:
错误:(15, 5) java: 方法没有覆盖或实现超类型中的方法
虽然我的配置文件很可能与错误无关,但如果有关其内容的任何内容不支持或对于我想要的级联保存行为是不必要的,我将不胜感激。到目前为止,它的内容只是为了支持此功能而编写的。
【问题讨论】:
标签: java mongodb spring-boot spring-data