spring 当data-jpa dep打开时注入Repository的问题

lztngnrs  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(119)

我注意到,当我取消注解JPA dep时,请参阅下面:

implementation("org.springframework.boot:spring-boot-starter-jdbc")
implementation ("org.springframework.boot:spring-boot-starter-data-jdbc")
//implementation ("org.springframework.boot:spring-boot-starter-data-jpa")
I do not have any @Entity annotated classes in my code.

字符串
开始时出现错误:

The bean 'myRepository', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.


实际上,我在启动时得到了所有仓库的这个错误,随机地,它只是在第一次无法启动和停止时失败。也就是说,我实际上在仓库中做了一些重复的事情,这是没有风险的。
我用途:id 'org.springframework.boot' version '2.2.0.RELEASE'版本
我做了gradlew clean build的项目,以确保我没有任何剩余。
我的repository class是:

public interface MyRepository extends CrudRepository<MyModel, UUID> {

    @Query(rowMapperClass = MyModelRowMapper.class, value = "select my_uuid, my_code from my_model_table")
    Iterable<MyModel> findMyStuff();
}


MyModel在哪里

public class MyModel {

    @Id
    private UUID id;
    private String code; ...


所有工程,如果我保持spring-boot-starter-data-jpa评论。
不知道,如果有一个错误,或者我仍然错过了设置的东西。
我得到了我

@Configuration
@EnableJdbcRepositories
public class RepositoryConfig {
}


和所有的存储库都在同一个包里。
毕竟,如果我不包括jpa,它也能工作。我的代码中还没有任何JPA特定的代码。

plicqrtu

plicqrtu1#

您需要确保不同的存储库仅由正确的Spring Data Module处理,将它们和相应的@EnableXXXRepositories annotation移动到单独的包中,或者为annotation提供适当的过滤器。
否则Spring Data将尝试创建错误类型的存储库,然后会失败,例如因为没有找到匹配的@Id annotation。

exdqitrt

exdqitrt2#

我不确定这是什么原因,但我看到在升级到Sping Boot 3.2.0时,JdbcMappingContext无法确定实体的默认构造函数的参数名称。
Spring data将哪个构造函数确定为默认构造函数是随机的,所以我们得到了一些实体的这个错误,而不是其他实体。
我想到的解决方法是向所有实体添加一个无参数的构造函数注解@PersistenceCreator

相关问题