gpt4 book ai didi

java - 无法覆盖 onBeforeConvert : "...have the same erasure, yet neither overrides the other"

转载 作者:行者123 更新时间:2023-12-02 04:13:20 28 4
gpt4 key购买 nike

我一直在尝试但未能模仿 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 会用红色曲线表示不覆盖的 @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;

主要错误信息如下:

Error:(16, 17) java: name clash: onBeforeConvert(org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent) in io.catalyte.training.CustomerCascadeSaveMongoEventListener and onBeforeConvert(org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent) in org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener have the same erasure, yet neither overrides the other

我认为解决这个问题也会消除第二条错误消息:

Error:(15, 5) java: method does not override or implement a method from a supertype

虽然我的配置文件很可能与错误无关,但如果其内容的任何内容不支持或对于我想要的级联保存行为是不必要的,我将不胜感激。到目前为止,它的内容只是为了支持此功能而编写的。

最佳答案

尽管其他人不太可能遇到这个问题,但对于后代来说:

正如人们可能猜到的那样,Baeldung 的代码没有任何问题,只是我复制它的方式不同而已。我的错误有两个,都与类签名有关。它应该看起来像这样:

public class CustomerCascadeSaveMongoEventListener extends AbstractMongoEventListener<Object> {

没有我给它的注释。

同样对于后代来说,像 MongoConfig 这样的 Java 配置文件通常位于主包中名为“config”的子包中。为了使此功能正常工作,我的 MongoTransactionConfig 文件如下所示:

@Configuration
@EnableMongoRepositories(basePackages = "io.catalyte.training.repositories")
public class MongoTransactionConfig extends AbstractMongoConfiguration {
@Bean
public CustomerCascadeSaveMongoEventListener customerCascadingMongoEventListener() {
return new CustomerCascadeSaveMongoEventListener();
}

@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}

@Override
protected String getDatabaseName() {
return "test";
}

@Override
public MongoClient mongoClient() {
return new MongoClient("127.0.0.1", 27017);
}
}

尽管您或您的 IDE 需要提供适当的包和导入语句。

关于java - 无法覆盖 onBeforeConvert : "...have the same erasure, yet neither overrides the other",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com