gpt4 book ai didi

java - 没有 Spring Boot 泛型会失败?

转载 作者:行者123 更新时间:2023-12-02 04:40:52 25 4
gpt4 key购买 nike

我有这个配置类:

@Configuration
@Import(PersistenceConfiguration.class)
public class DAOConfiguration {

@PersistenceContext
private EntityManager entityManager;

@Bean
public ClientDAO clientDAO() {
SimpleJpaRepository<Client, String> support = this.getSimpleJpaRepository(Client.class);
return new MySQLClientDAO(support);
}

@Bean
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@Description("Hibernate repository helper")
protected <T> SimpleJpaRepository<T, String> getSimpleJpaRepository(Class<T> domainClass) {
return new SimpleJpaRepository<T, String>(domainClass, this.entityManager);
}

}

如果我使用 Spring Boot 运行它,一切正常。但如果我不这样做,我就会得到这个异常:

Caused by: java.lang.ClassCastException: com.sun.proxy.$Proxy36 cannot be cast to org.springframework.data.jpa.repository.support.SimpleJpaRepository
at com.example.movies.domain.config.DAOConfiguration$$EnhancerBySpringCGLIB$$248dfcc5.getSimpleJpaRepository(<generated>) ~[spring-core-4.1.6.RELEASE.jar:na]
at com.example.movies.domain.config.DAOConfiguration.clientDAO(DAOConfiguration.java:27) ~[classes/:na]
at com.example.movies.domain.config.DAOConfiguration$$EnhancerBySpringCGLIB$$248dfcc5.CGLIB$clientDAO$0(<generated>) ~[spring-core-4.1.6.RELEASE.jar:na]
at com.example.movies.domain.config.DAOConfiguration$$EnhancerBySpringCGLIB$$248dfcc5$$FastClassBySpringCGLIB$$96fcb656.invoke(<generated>) ~[spring-core-4.1.6.RELEASE.jar:na]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309) ~[spring-context-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at com.example.movies.domain.config.DAOConfiguration$$EnhancerBySpringCGLIB$$248dfcc5.clientDAO(<generated>) ~[spring-core-4.1.6.RELEASE.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
... 43 common frames omitted
16:31:50.506 [main] DEBUG o.s.t.c.s.DirtiesContextTestExecutionListener - After test class: context [DefaultTestContext@4ff04845 testClass = ClientDAOTest, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [MergedContextConfiguration@75c57e85 testClass = ClientDAOTest, locations = '{}', classes = '{class com.example.movies.domain.config.DAOConfiguration}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]], dirtiesContext [false].

你知道发生了什么吗?我很困惑...提前致谢

<小时/>

编辑

这是失败的行:

return new SimpleJpaRepository<T, String>(domainClass, this.entityManager);

最佳答案

我想说您的处理方式是错误的,您不应该乱搞 SimpleJapRepository。您应该使用 @EnableJpaRepositories 并让它完成工作。

您应该做的是创建一个扩展 Spring Data 存储库接口(interface)之一的接口(interface)并添加 @EnableJpaRepository 基本上就是这样。没有 MySQLClientDAO 只是一个接口(interface),您将在运行时获得一个实现。

public interface ClientDAO<Client, String> extends JpaRepository {... }

然后在您的配置中

@Configuration
@Import(PersistenceConfiguration.class)
@EnableJpaRepositories(basePackages={"package.containing.repository.interfaces"}
public class DAOConfiguration { }

这基本上就是您所需要的。

如果您有另一个存储库,您唯一需要做的就是添加另一个接口(interface)。

public interface MovieDAO<Movie, String> extends CrudRepository { ... }

关于java - 没有 Spring Boot 泛型会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223714/

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