Java SpringJPA:跨不同自定义存储库的本机SQL查询
我有一个CriteriaAppender方法,用于为自定义存储库中的SQL本机查询准备where子句。比如说,Java SpringJPA:跨不同自定义存储库的本机SQL查询,java,sql,jpa,Java,Sql,Jpa,我有一个CriteriaAppender方法,用于为自定义存储库中的SQL本机查询准备where子句。比如说,com.abc.func1.repository.Pkg1RepositoryCustomImpl 现在,需要在不同包的下载功能中使用相同的查询。比如说,com.abc.func1.repository.Pkg2RepositoryCustomImpl 我不想将存储库自动连接到存储库中,还想避免重写相同的代码。因此,我计划将SQL appender方法放在实体/模型中,就像一个函数一样
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易受攻击。请让我检查一下您的建议。。。谢谢你的帮助!!