相关疑难解决方法(0)

在Spring Data JPA中处理实体继承的最佳方法

我有三个JPA实体A,BC具有以下层次结构:

    A
    |
+---+---+
|       |
C       B
Run Code Online (Sandbox Code Playgroud)

那是:

@Entity
@Inheritance
public abstract class A { /* ... */ }

@Entity
public class B extends A { /* ... */ }

@Entity
public class C extends A { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

使用Spring Data JPA,为这些实体编写存储库类的最佳方法是什么?

我知道我可以写这些:

public interface ARespository extends CrudRepository<A, Long> { }

public interface BRespository extends CrudRepository<B, Long> { }

public interface CRespository extends CrudRepository<C, Long> …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-jpa spring-boot

44
推荐指数
1
解决办法
3万
查看次数

在Spring Data JPA存储库中使用@Primary

如果有人需要在Spring Data存储库上使用@Primary:看起来Spring Data JPA忽略@Primary了存储库上的注释.

作为一种解决方法,我创建了BeanFactoryPostProcessor哪个检查给定的存储库是否有@Primary注释并将该bean设置为主要.

这是代码:

@Component
public class SpringDataPrimaryPostProcessor implements BeanFactoryPostProcessor {
    public static final String REPOSITORY_INTERFACE_PROPERTY = "repositoryInterface";


    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        makeRepositoriesPrimary(getRepositoryBeans(beanFactory));
    }

    protected List<BeanDefinition> getRepositoryBeans(ConfigurableListableBeanFactory beanFactory) {
        List<BeanDefinition> springDataRepositoryDefinitions = Lists.newArrayList();
        for (String beanName : beanFactory.getBeanDefinitionNames()) {
            BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);

            String beanClassName = beanDefinition.getBeanClassName();
            try {
                Class<?> beanClass = Class.forName(beanClassName);
                if (isSpringDataJpaRepository(beanClass)) {
                    springDataRepositoryDefinitions.add(beanDefinition);
                }
            } catch (ClassNotFoundException e) {
                throw new ApplicationContextException(String.format("Error when trying …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data-jpa

5
推荐指数
1
解决办法
761
查看次数