当前位置: 首页 > 知识库问答 >
问题:

从JPA解耦Spring数据

刘胜泫
2023-03-14

我有以下接口,我想为不同的提供者通用:

public interface SurveyData {

    @Id
    Long getId();
    void setId(Long id);

    List<QuestionData> getQuestions();
    void setQuestions(List<? extends QuestionData> questions);

}

我有实体实现。

@Entity
@Table(name="sus_survey")
public class JpaSurveyData implements SurveyData {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sus_survey_seq")
    @SequenceGenerator(name = "sus_survey_seq", sequenceName = "sus_survey_seq")
    private Long id;

    @Version
    private Long version;

    @OneToMany(mappedBy="owningSurvey")
    private List<JpaQuestionData> questions;

    //.... setters/getters
}

我想在我的beans存储库中注入实现以下接口:

@NoRepositoryBean
public interface SurveyDataRepository extends PagingAndSortingRepository<SurveyData, Long> {}
@Repository
public interface JpaSurveyDataRepository extends JpaRepository<JpaSurveyData, Long> {}
public interface SurveyDataRepository<T extends SurveyData> extends PagingAndSortingRepository<SurveyData, Long> {}

@Repository("surveyDataRepository")
public interface JpaSurveyDataRepository extends SurveyDataRepository<JpaSurveyData> {}
@Autowired
private SurveyDataRepository<SurveyData> surveyDataRepository;
No qualifying bean of type [com.xyz.SurveyDataRepository] found for dependency.
@Repository("surveyDataRepository")
public interface JpaSurveyDataRepository extends SurveyDataRepository<SurveyData> {}

结果是:

Not an managed type: interface com.xyz.SurveyData

有什么想法怎么解决?也可能少了什么。我看到的唯一解决方案是将存储库包装到自己的类中,但我希望避免这种情况。

共有1个答案

金谭三
2023-03-14

我不太确定我是否理解你的问题。如果我没有的话很抱歉。

这就是你想要的吗?您有一个接口(或抽象类)surveydata和类JPASURVeydata来实现它。
您希望有一个接口A,带有surveydata和一些存储库来扩展A。

如果我是对的,这就是我的工作解决方案:

@NoRepositoryBean
public interface AbstractSurveyDataRepository<T extends SurveyData, ID extends Serializable> extends JpaRepository<T, ID> {
  T findOneBySomeId(Long someId); // you can add some common function here.
}
public interface JPASurveyDataRepository extends AbstractSurveyDataRepository<JPASurveyData, Long> {
    JPASurveyData findOneBySomeField(Long someField);
}
 类似资料:
  • 主要内容:1.自定义事件,2.定义监听器,3.定义发布者,4.单测执行,5.Spring Event 异步使用解耦业务: Aop Event Mq agent 都是侵入性业务, 但是侵入性业务是不可避免的。 1.自定义事件 定义事件, 的类成为一个事件类 2.定义监听器 监听并处理事件,或者使用 注解 3.定义发布者 发布事件,通过 ApplicationEventPublisher 发布事件 4.单测执行 5.Spring Event 异步使用 有些业务场景不需要在一次请求中同步完成,比如邮件

  • 主要内容:1.自定义事件,2.定义监听器,3.定义发布者,4.单测执行,5.Spring Event 异步使用解耦业务: Aop Event Mq agent 都是侵入性业务, 但是侵入性业务是不可避免的。 1.自定义事件 定义事件, 的类成为一个事件类 2.定义监听器 监听并处理事件,或者使用 注解 3.定义发布者 发布事件,通过 ApplicationEventPublisher 发布事件 4.单测执行 5.Spring Event 异步使用 有些业务场景不需要在一次请求中同步完成,比如邮件

  • 在数据流服务器中运行的流管道以及任务可以在不将其部署到数据流服务器中的情况下运行,或者在另一个基础结构上运行需要额外的工作? 谢谢,

  • 我环顾四周,还没有找到任何关于如何用纯粹的功能性方法来处理变更的解释,这让我相信我误解了一些基本的东西。 如何在不将函数类型签名绑定在实现特定类型中的情况下公开函数API?我是不是想错了?

  • 我有两个实体。父母和孩子。 儿童知识库。JAVA 我试图通过标准找到子实体,它应该总是有父实体。 我得到一个例外,它试图在地址表中找到parentObj。 我找到了这个链接,并尝试了Joep给出的解决方案,但出现了相同的错误。 Spring数据JPA JpaSpecificationExecator EntityGgraph 我错过了什么。我无法理解为什么/如何在just Child对象中查找pa

  • 我使用的是Spring数据jpa,MySQL。我有以下实体 Mysql表如下所示, 我想搜索所有