Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring+JPA+SQL视图_Java_Spring_Hibernate_Spring Data Jpa - Fatal编程技术网

Java Spring+JPA+SQL视图

Java Spring+JPA+SQL视图,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我已经看到JPA支持使用视图而不是表。 我们的DBA告诉我们,我们需要为不同种类的东西使用特定的视图,例如:一个视图用于选择,另一个视图用于插入,另一个视图用于更新 目前,我有一个实体和一个与特定表相关的JPA存储库 我的问题是: 我应该如何处理这些新视图? 我应该为每个视图创建一个实体吗? 是否有一种方法可以将一个实体映射到多个JPA存储库,其中每个存储库都与不同的视图相关 谢谢 如果您使用这种方法,那么每个视图都会有JPA实体,而不是表,您的代码将不知道数据是如何存储的,对于每个实体,您的存

我已经看到JPA支持使用视图而不是表。 我们的DBA告诉我们,我们需要为不同种类的东西使用特定的视图,例如:一个视图用于选择,另一个视图用于插入,另一个视图用于更新

目前,我有一个实体和一个与特定表相关的JPA存储库

我的问题是: 我应该如何处理这些新视图? 我应该为每个视图创建一个实体吗? 是否有一种方法可以将一个实体映射到多个JPA存储库,其中每个存储库都与不同的视图相关


谢谢

如果您使用这种方法,那么每个视图都会有JPA实体,而不是表,您的代码将不知道数据是如何存储的,对于每个实体,您的存储库也不会有任何改变

链接到有关视图的文档:

我使用的是Spring Boot,也有同样的问题。我有一个视图,它从各种Spring批处理表中获取各种字段,以显示用户运行的作业的状态。经过一些试验后,以下各项起了作用:

@Entity
public class Job {
    @Id
    @Column(name = "JOB_INSTANCE_ID")
    private String jobInstanceId;
    @Column(name = "JOB_EXECUTION_ID")
    private String jobExecutionId;
    @Column(name = "JOB_NAME")    
    private String jobName;
    @Column(name = "JOB_TYPE")    
    private String jobType;
    @Column(name = "START_TIME")    
    private Date startTime;
    @Column(name = "END_TIME")    
    private Date endTime;
    @Column(name = "STATUS")    
    private String status;
    @Column(name = "USERNAME")    
    private String username;    

    public String getJobInstanceId() {
        return jobInstanceId;
    }

    public void setJobInstanceId(String jobInstanceId) {
        this.jobInstanceId = jobInstanceId;
    }

    public String getJobName() {
        return jobName;
    }

    public void setJobName(String jobName) {
        this.jobName = jobName;
    }   

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getJobType() {
        return jobType;
    }

    public void setJobType(String jobType) { 
        this.jobType = jobType; 
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getJobExecutionId() {
        return jobExecutionId;
    }

    public void setJobExecutionId(String jobExecutionId) {
        this.jobExecutionId = jobExecutionId;
    }    
}
以及存储库定义:

public interface JobsRepository extends JpaRepository<Job, String> {
    @Query(value = "SELECT JOB_INSTANCE_ID, JOB_EXECUTION_ID, JOB_NAME, JOB_TYPE, START_TIME, END_TIME, STATUS, USERNAME  FROM JOBS_VW", nativeQuery = true)
    List<Job> getAll();
    @Query(value = "SELECT JOB_INSTANCE_ID, JOB_EXECUTION_ID, JOB_NAME, JOB_TYPE, START_TIME, END_TIME, STATUS, USERNAME  FROM JOBS_VW WHERE JOB_INSTANCE_ID=?1", nativeQuery = true)
    List<Job> getJobsByInstanceId(String instanceId);
}

所以,现在我有了:-1个名为Test-1JPA存储库的实体,名为TestJPA-1DB表,名为Test。您是在建议我必须为每个视图创建一个实体吗?类似于:-3个视图testSelect、TestUpdate和TestInsert-1个名为Test的DB表-我们不关心这个-3个与三个视图testSelect、TestUpdate和TestInsert相关的实体3 JPA存储库是否正确?理论上是的,但大多数此类解决方案都用于这样的情况:在UI中,您的数据是多个表的组合,而不是复杂的SQL查询,您创建单独的视图或多个视图来更新数据,并创建单独的视图来获取数据。我对SQL视图了解不多,但是您所描述的不同种类的特定视图听起来很像RESTful API。我可以告诉你,我们有一个单独的视图服务器,每个实体更新/创建/选择一个操作都有一个API。。。。我们为每个实体使用DTO模式,以确保服务逻辑和存储库逻辑之间的分离。JPA用于将数据库结构映射到服务逻辑。存储库是连接到数据库的方法,在呈现数据库之前,您可能会调用多个存储库views@jrhee17我有一个带DTO模式的RESTful API。我还有一个映射器,可以将DTO映射到实体。问题是实体不会与表相关,因为我必须使用不同的视图来保存、更新和获取。也许JPA不打算以这种方式使用,我真的不知道。