如何使用Spring和Hibernate执行动态查询来填充非实体POJO类

时间:2016-01-16 20:56:06

标签: java spring hibernate jpa ibatis

我有一项任务是将项目的某些部分从iBatis迁移到Hibernate。我有以下表格:

CREATE TABLE manufacturer (
  country VARCHAR(3)   NOT NULL,
  code    VARCHAR(2)   NOT NULL,
  name    VARCHAR(100) NOT NULL,
  PRIMARY KEY (country, code)
);

CREATE TABLE model (
  country           VARCHAR(3)   NOT NULL,
  manufacturer_code VARCHAR(2)   NOT NULL,
  code              VARCHAR(2)   NOT NULL,
  name              VARCHAR(100) NOT NULL,
  PRIMARY KEY (country, manufacturer_code, code),
  CONSTRAINT fk__model_manufacturer FOREIGN KEY (country, manufacturer_code) REFERENCES manufacturer (country, code)
  ON DELETE CASCADE
  ON UPDATE CASCADE
);

我为制造商和模型创建了实体类和存储库。它到目前为止工作。但现在我需要实现这个动态查询(iBatis mapper @Select):

SELECT country, code, name,
<if test="criteria.text != null">,ARRAY_TO_JSON(regexp_matches(name, #{criteria.text},'i')) AS match</if>
FROM manufacturer
WHERE UPPER(country) = UPPER(#{countryCode})
<if test="criteria.text != null"> AND name ~* #{criteria.text}</if>
ORDER BY name
</script>

它用于通过正则表达式搜索制造商名称。结果包含制造商代码和名称以及有关正则表达式匹配的详细信息。结果通过iBatis结果映射存储在非实体POJO类中。

请问您如何使用JPA来实现这一目标?或者你会推荐另一种方法如何实现这一目标?你会如何解决这样的任务? 请详细说明一点,我是这个领域的学习新手。非常感谢提前。

0 个答案:

没有答案