Java SpringJPA:跨不同自定义存储库的本机SQL查询

Java SpringJPA:跨不同自定义存储库的本机SQL查询,java,sql,jpa,Java,Sql,Jpa,我有一个CriteriaAppender方法,用于为自定义存储库中的SQL本机查询准备where子句。比如说,com.abc.func1.repository.Pkg1RepositoryCustomImpl 现在,需要在不同包的下载功能中使用相同的查询。比如说,com.abc.func1.repository.Pkg2RepositoryCustomImpl 我不想将存储库自动连接到存储库中,还想避免重写相同的代码。因此,我计划将SQL appender方法放在实体/模型中,就像一个函数一样

我有一个CriteriaAppender方法,用于为自定义存储库中的SQL本机查询准备where子句。比如说,
com.abc.func1.repository.Pkg1RepositoryCustomImpl

现在,需要在不同包的下载功能中使用相同的查询。比如说,
com.abc.func1.repository.Pkg2RepositoryCustomImpl

我不想将存储库自动连接到存储库中,还想避免重写相同的代码。因此,我计划将SQL appender方法放在
实体/模型
中,就像一个函数一样
public void appenderiatonative(StringBuffer-sqlQuery)


是否有人可以建议这种方法是否正确,或者是否有其他更好的设计来实现这一点。

我认为在实体中使用sql appender不是一个好方法,它看起来并不干净。如果您在自定义存储库中有相同的代码,您是否考虑到新的存储库会删除旧的存储库,或者两者都扩展了一个共享功能?是的,我确实考虑过这个选项,但是我追加到SqLQuess的是实体的属性。例如,如果实体是Profile,那么我想调用
Profile.appendCriteriaToNative(nativeQuery)
,这样它就可以像
“where Profile_NAME=“+Profile.NAME
那样进行追加。现在,如果我在新包中创建一个基本存储库,那么填充和外部实体本身就没有绝对意义。您可以将类SqlAppender创建为singleton,并将其注入到两个存储库中,SqlAppender可以有方法
appendCriteria(String nativeQuery,Entity)可以为实体创建公共接口。但这不是一个好的解决方案,因为与您的解决方案一样,sql injectok易受攻击。请让我检查一下您的建议。。。谢谢你的帮助!!