【问题标题】:Getting data from View using CrudRepository使用 CrudRepository 从 View 获取数据
【发布时间】:2019-07-06 05:25:50
【问题描述】:

对于这个问题,我不是在寻找解决方案,而是在寻找可以让自己领先的方向,因此不共享任何代码。

我正在准备一个 REST API,并且我在本地设置了 postgresql 数据库,它有 2 个表和来自这 2 个表的一个视图。

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

DataRepository 类:

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);
    }
}

DataController 类:

@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
}

现在我想从视图中检索数据,那么,应该采用什么方法呢?

我们是否应该使用相同的方法来创建 Model、Service、Ctonroller 和 Repository 类?

我们可以使用 CrudRepository 来达到同样的效果吗?

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

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

【问题讨论】:

  • 我真的看到了那个,它描述了使用CrudRepository接口的基本过程,并讲述了如何连接到mysql,mongodb等db。但我真正在寻找的是从 VIEW 而不是表中检索数据。

标签: java rest spring-boot spring-mvc spring-data-jpa


【解决方案1】:

CrudRepository 的读取方法应该适用于视图。写法,view需要updateableenter link description here

如果你只想读,不想写repository,可以复制CrudRepository的源代码,去掉所有写方法,创建ReadOnlyRepository

请注意,JPA 仍会尝试保留对托管实体所做的更改。 为避免这种情况并避免脏检查的成本,如果您使用的是 Hibernate,您可以mark your entities as immutable

【讨论】:

  • 要使用额外的过滤器,比如 , 其中 id='1' 和 category='A' 我应该使用 @Query 注释吗?
  • 您可以使用完整的 Spring Data JPA 功能集:@Query 注释、派生查询、规范、自定义方法。
  • 所以,我正在创建新的模型、服务和控制器类,就像我们通常在从表中获取数据时所做的那样。但最终 jpa 将能够知道它必须在表中而不是在视图中查看数据。另外,我们可以在Model类上面使用@Table注解来改变表名,如果我们想自定义视图名怎么办?
  • 是的,除了写入视图时可能存在的限制之外,视图对于 JPA(实际上是任何数据库用户)看起来就像一个表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多