【问题标题】:using spring data jpa repository if there is no primary key如果没有主键,则使用 spring data jpa 存储库
【发布时间】:2019-06-14 13:43:44
【问题描述】:

我正在从事一个项目,在该项目中,我可以查看其他团队公开的数据库表,并且其他团队也在使用该视图。 我在项目中使用spring data jpa..

向我们展示的视图没有主键。

如果没有主键,我的 ViewRepository 接口应该如何声明..

我有一个包含许多值的视图,我创建的实体如下

package com.mf.acrs.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name="mv_garage_master")
public class GarageMaster {

    @Column(name="GARAGE_CODE")
    private String garageCode;

    @Column(name="GARAGE_NAME")
    private String garageName;

    @Column(name="GARAGE_BRANCH")
    private String garageBranch; 


}

仓库界面如下:

package com.mf.acrs.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.mf.acrs.model.GarageMaster;

@Repository
public interface GarageMasterRepository extends JpaRepository<GarageMaster,ID>{
}

我的问题是上面界面中的ID应该输入什么值..

【问题讨论】:

  • 嗨@tin_tin,我为你添加了一个可能的解决方案。
  • 如果是视图,那么您可以通过一个简单的技巧来解决这个问题,您可以在视图中添加唯一标识符作为当前行号,然后您可以在 Spring Data 实体中使用行号
  • @Govind Parashar 的这个建议是好的和危险的。因为它是提供的视图,所以条目可以更改,并且由于数据库中的插入,ID 为 4 的记录现在可以是不同的条目。
  • @Brother : 同意 从设计的角度来看它很糟糕。查看一般只读。如果你没有唯一的列,那么你就无法计算出复合键

标签: spring hibernate spring-data-jpa spring-data


【解决方案1】:

因此,Entity、JPA 和 Spring Data 需要您拥有 ID,这就是找到或更新实体的方式。

[更新] @tintin 如果garageCode 根据您的评论是唯一的,您可以这样实现:

@Entity
@Table(name="mv_garage_master")
public class GarageMaster implements Serializable {
    @Id
    @Column(name="GARAGE_CODE")
    private String garageCode;

    @Column(name="GARAGE_NAME")
    private String garageName;

    @Column(name="GARAGE_BRANCH")
    private String garageBranch; 
}

还有存储库:

@Repository
public interface GarageMasterRepository extends JpaRepository<GarageMaster,String>{
}

【讨论】:

  • 在我的示例中,只有garage_code 是唯一的。我如何修改您的解决方案以在这种情况下工作。
  • 哦,好吧,所以你有一个独一无二的字段。比这仍然适用于你,但它是一个“矫枉过正”。之后我将修改解决方案,但主要是将字段从我创建的 Id 类移动到主类,并在garageCode 顶部和存储库中添加注释@Id,id 将是 String 而不是 GarageMasterId,你可以删除这个类。
  • 感谢您的解决方案有效.. 即使我不添加“实现可序列化”,代码也可以正常工作的一个问题。这个可序列化的目的是什么?
  • hI @tin_tin 我很高兴它成功了!所以关于 Serializable,通常对于通过 web 服务/rest 发送的实体或对象或持久化在 DB 中的实体或对象,出于某些原因,建议使用它,这里对其进行简要说明:geeksforgeeks.org/serialization-in-java
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2018-08-06
  • 2020-02-18
  • 2018-06-15
  • 2016-03-26
相关资源
最近更新 更多