Nav*_*mar 5 postgresql spring hibernate hibernate-mapping spring-boot
我有一个 Spring Boot 项目,其中有多个 Model 类
我想在我的 DAO 实现中使用多个模型类。
有人可以解释一下我如何在这里使用 HQL 查询吗?
我看到的大多数示例都使用 CRUDRepository。但根据我的理解,这将我们限制为一个模型类(如果我的理解错误,请纠正我)。
其次,使用 CRUDRepository 限制了我使用非常具体的方法。但我需要的 HQL 查询可能更复杂,例如:
Query query = session.createQuery(from Employee where name=:name and place=:place and phone=:phone and gender=:gender);
Run Code Online (Sandbox Code Playgroud)
即使对于这样的 HQL 查询,使用 CRUDRepository 是标准做法吗?否则我怎么能使用这样的 HQL 查询。(如果可能的话,还请添加我需要添加的所有依赖项和注释)。我正在使用 Hibernate 和 postgres。
如果您希望在不使用存储库等的情况下执行动态 HQL 查询,这对我来说非常有效:
@Autowired
EntityManager entityManager;
@RequestMapping("/query")
@ResponseBody
public String testQuery() {
Query query = entityManager.createQuery("select u from User u");
List<User> users = query.getResultList();
users.forEach(u -> System.out.println(u.getFirstname()));
return "See Console";
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,如果您想要快速测试查询,并且正在使用 Spring LiveReload、JRebel、DCEVM 或 HotSwap 等 Hybris,您可以更改查询并保存和刷新。
CRUD 存储库是编写 DAO 的标准方法。如果您查看文档,您会发现您可以进行使用实体字段的复杂查询(这可能非常复杂,我鼓励您查看此处的查询方法部分 - 4.3),如果您甚至想要更复杂的方法,您可以@Query在方法上使用注释:
@Repository
interface MyRepo implements JpaRepository<MyEntity,Long> {
@Query("your custom query here")
MyEntity findByFeature(String a)
}
Run Code Online (Sandbox Code Playgroud)
String a现在您可以插入查询并在查询中访问您(例如您的输入字符串在Select u where u.name="blabla"哪里)blabla
它@Query具有与存储库相同的依赖性(我认为这就spring-boot-starter-data-jpa足够了)
| 归档时间: |
|
| 查看次数: |
19656 次 |
| 最近记录: |