带有 JPA 存储库的 Stringbuilder
Stringbuilder with JPA repository
我有构建动态服务的需求。
我正在使用 Stringbuilder,但我不确定如何将其与 JPA 存储库一起使用。
我使用 Stringbuilder.toString() 构建了一个 SQL 本机查询,然后将其传递给 JPA 接口。当我 运行 这个时,我得到一个 "syntax error"。
但是当我 运行 我在 DBeaver 中使用 StringBuilder 构建的相同查询时,我能够得到结果。
@Repository
public interface UserRepository extends JpaRepository<User, Long>
@Query(value = ":strQry", nativeQuery = true)
List<User> findUserDetails(@Param("strQry") String strQry);
前导冒号表示的那些东西是 "bind parameters" 你只能用绑定参数替换表达式,即你可以在你也可以使用像 23
或 [=12 这样的文字表达式的地方使用它们=].
如果你想构建你的 SQL 语句并执行它,你必须写一个 custom method,得到一个 EntityManager
注入并执行类似
的东西
em.createNativeQuery(yourSqlStatement).getResultList();
注意:请阅读有关 SQL 注入攻击的内容。连接您自己的 SQL 语句和不理解绑定参数的组合可能会导致漏洞。
我有构建动态服务的需求。 我正在使用 Stringbuilder,但我不确定如何将其与 JPA 存储库一起使用。
我使用 Stringbuilder.toString() 构建了一个 SQL 本机查询,然后将其传递给 JPA 接口。当我 运行 这个时,我得到一个 "syntax error"。 但是当我 运行 我在 DBeaver 中使用 StringBuilder 构建的相同查询时,我能够得到结果。
@Repository
public interface UserRepository extends JpaRepository<User, Long>
@Query(value = ":strQry", nativeQuery = true)
List<User> findUserDetails(@Param("strQry") String strQry);
前导冒号表示的那些东西是 "bind parameters" 你只能用绑定参数替换表达式,即你可以在你也可以使用像 23
或 [=12 这样的文字表达式的地方使用它们=].
如果你想构建你的 SQL 语句并执行它,你必须写一个 custom method,得到一个 EntityManager
注入并执行类似
em.createNativeQuery(yourSqlStatement).getResultList();
注意:请阅读有关 SQL 注入攻击的内容。连接您自己的 SQL 语句和不理解绑定参数的组合可能会导致漏洞。