上下文
我继承了一个基于Spring的小项目 - 跟踪服务器,软件安装等,或团队内部使用。它使用Angular前端和Spring / java / mysql后端来实现一个宁静的后端。
我在过去几个月里将它转换为Spring引导。我是Spring和Spring的新手。所以我一直在学习。
我开始更换手动编码'带有JPA的sql(" spring-data-rest")。对于某些表格,JPA很容易,但对其他表格则不然。对于这些"其他":手工编写的SQL使用"视图"检索数据时。
方法
具体来说,它使用这种方法:
当它创建或更新表格时(例如"网站"表格,如"网站"),它会传入" ID' S:" Server_id,product_id,customer_id等
软件从"网站视图"加入服务器,产品和客户表,以便java可以检索服务器名称,产品名称,客户名称等,而无需单独的数据库调用。
问题
转换这些"只读视图"最干净,最弹簧启动方式是什么?到JPA?
处理星形连接的最简洁方法是什么?'在Spring / JPA? (其中一个中心表与其他几个表连接以向用户提供他/她需要的数据)
感谢
答案 0 :(得分:2)
我假设您可以使用通常的projection和native query来获取视图中的数据。像这样:
public interface ViewResult {
String getField1();
Integer getField2();
Double getField3();
//...
}
public interface SomeRepository extends JpaRepository<SomeEntity, Long> {
@Query(value = "select v.field1 as field1, v.field2 as field2, v.field3 as field3 from some_view v", nativeQuery = true)
List<ViewResult> getViewResult();
}
要处理复杂查询,您还可以使用投影:
@Query("select a as abc, b as bcd, c as cde from Abc a join a.bcd b join a.cde c")
List<AbcBcdCde> getComplexData();
其中AbcBcdCde
是投影:
public interface AbcBcdCde {
Abc getAbc();
Bcd getBcd();
Cde getCde();
}