Java 使用crudepository从视图中获取数据

Java 使用crudepository从视图中获取数据,java,rest,spring-boot,spring-mvc,spring-data-jpa,Java,Rest,Spring Boot,Spring Mvc,Spring Data Jpa,对于这个问题,我不是在寻找解决方案,而是在寻找一个方向,从那里我可以走在前面,因此不共享任何代码 我正在准备一个RESTAPI,我在本地设置了postgresql数据库,它有两个表和来自这两个表的一个视图 通常,当我想从DB获取任何数据时,我会使用以下代码(为了清晰起见): 数据存储库类: public interface DataRepository extends CrudRepository<Data, String>{} @Service public class Data

对于这个问题,我不是在寻找解决方案,而是在寻找一个方向,从那里我可以走在前面,因此不共享任何代码

我正在准备一个RESTAPI,我在本地设置了postgresql数据库,它有两个表和来自这两个表的一个视图

通常,当我想从DB获取任何数据时,我会使用以下代码(为了清晰起见):

数据存储库类:

public interface DataRepository extends CrudRepository<Data, String>{}
@Service
public class DataService {
    @Autowired
    private DataRepository repo;
    public Data getData(String id){
        return repo.findById(id).orElse(null);
    }
}
@RestController
public class DataController{
    @Autowired
    private DataService service;
    @RequestMapping("/{id}")
    public Data getData(String id){
        return service.getData(id);
    }
}
@Entity
public class Data{
    @Id
    private String id;
    private String name;

    //respective getter and setter methods
}
数据控制器类:

public interface DataRepository extends CrudRepository<Data, String>{}
@Service
public class DataService {
    @Autowired
    private DataRepository repo;
    public Data getData(String id){
        return repo.findById(id).orElse(null);
    }
}
@RestController
public class DataController{
    @Autowired
    private DataService service;
    @RequestMapping("/{id}")
    public Data getData(String id){
        return service.getData(id);
    }
}
@Entity
public class Data{
    @Id
    private String id;
    private String name;

    //respective getter and setter methods
}
数据类:

public interface DataRepository extends CrudRepository<Data, String>{}
@Service
public class DataService {
    @Autowired
    private DataRepository repo;
    public Data getData(String id){
        return repo.findById(id).orElse(null);
    }
}
@RestController
public class DataController{
    @Autowired
    private DataService service;
    @RequestMapping("/{id}")
    public Data getData(String id){
        return service.getData(id);
    }
}
@Entity
public class Data{
    @Id
    private String id;
    private String name;

    //respective getter and setter methods
}
现在我想从视图中检索数据,那么,应该采用什么方法呢?

我们是否应该使用相同的方法创建模型、服务、Ctonroller和存储库类?

我们可以使用Crudepository实现同样的目标吗?

我搜索了很多地方,但没有找到任何有用的东西


如果有人对此有任何线索,请告诉我。

一个
crudepository
的阅读方法应该可以在视图中正常工作。对于编写方法,视图需要是可更新的

如果只想读取而不想写入存储库,可以通过复制
crudepository
的源代码并删除所有写入方法来创建
ReadOnlyRepository

请注意,JPA仍将尝试持久化对托管实体所做的更改。
为了避免这种情况,也为了避免脏检查的成本,如果您使用的是Hibernate。

也许您喜欢我实际看到的那种,这里介绍了使用Crudepository接口的基本过程,并告诉您如何连接到数据库,如mysql、mongodb。但是我实际上在寻找的是从一个视图而不是一个表中检索数据。要使用额外的过滤器,比如,我应该在哪里使用id='1'和category='a'@Query annotation?您可以使用full Spring data JPA功能集:
@Query
annotation、派生查询、规范、自定义方法。因此,我正在创建新的模型,服务和控制器类,就像我们通常从表中获取数据时所做的那样。但最终jpa将能够知道它必须查看表中的数据,而不是视图中的数据。此外,我们还可以通过在模型类上方使用@table注释来更改表名,如果我们想自定义视图名,该怎么办?是的,除了写入视图时可能存在的限制之外,视图对于JPA(实际上是任何数据库用户)来说看起来就像一个表。