当前位置: 首页 > 知识库问答 >
问题:

如何为具有复合键的表编写JPararePository

田晨
2023-03-14

请参考附件截图了解表格结构。

Empd_Id是'employee'表中的主键,该主键与'product'表中的'product_id'一起成为复合键的一部分。任何员工都可以拥有多个产品,因此在这种情况下,“员工-产品”表之间就变成了“一对多”关系。现在我很困惑,是只需要编写1个JpaRepository接口(即为employee编写),还是需要编写2个JpaRepository接口(1个为employee编写,另一个为Product编写)。我的直觉只是一个员工表的界面,但如何???

下面是我的代码片段:-第一个JPA存储库接口

public interface MyRepository extends JpaRepository<Product, EmpProd> {
}
@Entity
@Table(name="product")
public class Product{

    @EmbeddedId
    private EmpProd empProd;

    @Column(name="product_name")
    private String commerceUserId;

    @Column(name="description")
    private String description;
@Embeddable
public class EmpProd implements Serializable{

    private static final long serialVersionUID = 1L;

    @NotNull
    @Column(name="emp_id")
    private String empId;

    @NotNull
    @Column(name="product_id")
    private String productId;

第二个Jpa存储库接口

public interface MyMainDataRepository extends JpaRepository<Employee, String> {
}

实体类别:-

@Entity
@Table(name="employee")
public class Employee{

    @Id
    @NotNull
    @Column(name="emp_id")
    private String empId;

    @Column(name="first_name")
    private String firstName;

虽然我已经写了两个单独的JPA存储库,但我强烈认为只需要一个,即主要的一个。

但由于我对Spring data Jpa还不熟悉,所以我不知道如何使用单一的Jpa存储库来关联实体类和获取数据。如果有人能在这里帮助我,我会非常感激的。谢谢

共有1个答案

申屠健
2023-03-14

就JPA而言,productemployee这两个实体没有任何联系。因此,您不能通过一个存储库同时访问这两个存储库。

例如,如果product具有对employee的实际引用,则可以使用ProductRepository加载product并从中导航到所引用的employee

但即使这是可行的,我也认为productemployee应该被视为不同的聚合,因此应该各自拥有自己的存储库。请参见JPA中的每个表应该有一个存储库吗?有关该问题的更多信息。

 类似资料:
  • 问题内容: 我需要一个表来存储一些评分,在此表中,我有一个 综合索引(user_id,post_id) 和其他列来标识不同的评分系统。 在此表中,我没有 主键, 因为 主键 必须是唯一的,而INDEX不必是唯一的,就我而言,唯一性是一个问题。 例如我可以有 缺少PRIMARY KEY可能会导致性能问题?我的表结构好还是需要更改? 谢谢 问题答案: 几点: 听起来您只是在使用表的当前唯一特性,并将其

  • 我很难在Hibernate上映射以下数据库模式: 是一个现有的表,它已经映射到Java类上。表是最近创建的,它只有两列。这两列都是复合主键的一部分。列引用表上的列,而只是一个不引用数据库上任何列的松散id。 请注意,数据库表和列名与Java类和属性名并不完全相同。e、 g.java类名为顺序,表名为tb\u顺序。我认为这一点很重要,因为Hibernate推断出的表/列名可能不匹配(表列也是snak

  • 问题内容: 这是场景: 我有2个数据表,一个是2009年版本,另一个是2010年版本。每个表的主键是组合键。我知道每一行都有不同数量的行,我需要找出差异。 通常,在“常规”主键设置中,我只会在其他表的主键列表中查找主键值。但是我不知道如何使用复合主键(甚至是可能的话)执行此操作。 那么,如何比较这两个表中的行呢? 编辑:更具体地说,我试图找到表之间的 差异 ,而不是共同的行 问题答案: 只需使用基

  • 问题内容: 这个问题已经在这里有了答案 : 由于在MySQL中使用保留字作为表或列名而导致的语法错误 (1个答案) 6年前关闭。 以下查询将不会执行 它产生以下错误信息: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第2行的“ order WHERE orderID = 102”附近使用 如何编写可成功查询此表的SQL? 问题答案: 订单是保留字。不要将保留

  • 我严重卡在一张有复合钥匙的桌子上。我试图用雄辩的口才通过两个主键过滤记录。但是我开始知道雄辩不支持复合键。我经历了许多解决方案,但没有一个解决方案足够清晰,让初学者理解。 解决方案代码表示使用以下代码编辑模型类: 我想使用laravel提供的资源控制器执行更新功能:我的代码如下所示: 另外,请指导我如何使用带有主键的资源控制器,因为它会为一些参数抛出错误?请帮帮我。我读了很多在线文章,真的很累,但

  • 我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用