当前位置: 代码迷 >> 综合 >> SpringData JPA自定义SQL时,将表名以参数的形式传入解决方案
  详细解决方案

SpringData JPA自定义SQL时,将表名以参数的形式传入解决方案

热度:22   发布时间:2023-11-26 23:27:08.0

最近有个需要就是分表的操作,就是事先不知道数据存在的表到底是那张表,需要根据配置文件或者参数解析之后才能确定到底是那张表。所以这就需要将表名实时的传入进入。要是之前的我们所使用的mybatis的话,其实这个问题很好解决,只需要将#换成$即可,但是由于我们现在用的是JPA,所以这个并不能直接操作。所以这块需要引入EntityManager类,具体操作如下:
在repository包或者dao包下的实现类中注入EntityManager,并加上@PersistenceContext注解(注入的是实体管理器,执行持久化操作),然后只需要在方法中编写sql语句,以字符串拼接的方式编写即可,如下

 String sql = "select _mid from " + userMessageTable + " where  _uid='" + uid + "' LIMIT 1";Object mid = entityManager.createNativeQuery(sql).getSingleResult();

userMessageTable 便是传递的表名,这样便实现了表名以传递的方式执行的sql

  相关解决方案