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

如何使用注释在列不是主键的两个实体之间连接?

何正德
2023-03-14

我有两张员工和地址表。每个都有通过序列生成的主键empId和addressId。

员工类别:

public class Employee {
    @Id
    @Column(name = "sequence_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "emp_seq")
    @SequenceGenerator(sequenceName = "emp_seq", allocationSize = 1, name = "emp_seq")
    private Long sequenceId;

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

    @Column(name = "joiningDate")
    private Date businessDate;

    @OneToOne(mappedBy = "employee", cascade = CascadeType.ALL)
    private Address address;
}

地址类

公共课堂演讲{

@Id
@Column(name = "address_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "address_seq")
@SequenceGenerator(sequenceName = "address_seq", allocationSize = 1, name = "address_seq")
private Long addressID;

@Column(name = "street")
private String street;

@OneToOne
@JoinColumn(name = "emp_id")
@JsonIgnore
private Employee employee;

}

我正在使用JPARepository来保存这两个实体。这是我的主类。

Employee e = Employee.builder().businessDate(new Date())
        .empId("thinkerId").build();
Address a = Address.builder().street("32nd Street")
        .employee(e).build();
e.setAddress(a);
empRepository.save(e);

代码成功运行。但在我的地址表中,emp\u Id列包含主键,而不是emp\u Id列。

如何将“thinkerId”作为地址表中的值?

非常感谢。

共有1个答案

萧心远
2023-03-14

Address实体中,您必须显式指定您所引用的列:

public class Address {

    @Id
    @Column(name = "address_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "address_seq")
    @SequenceGenerator(sequenceName = "address_seq", allocationSize = 1, name = "address_seq")
    private Long addressID;

    @Column(name = "street")
    private String street;

    @OneToOne
    @JoinColumn(name = "emp_id", referencedColumnName = "emp_id")
    @JsonIgnore
    private Employee employee;
}
 类似资料:
  • 问题内容: 这是我的注释类,我想同时将列作为主键。我发现了与此有关的更多问题,但未找到相关答案。我的声誉较差,所以我无法在帖子中发表评论,所以我将我的问题放在这里。 这是我的代码。 问题答案: 您应该创建一个包含PK字段的新类: 并将其用作: 您也可以使用注释来达到这种效果。 这出色答卷由帕斯卡尔Thivent阐述了细节。您也可以看看这个其他答案,我前一段时间发布到一个几乎相同的问题。 附带说明一

  • 我是初学Hibernate的,我不知道如何使用JPA或Hibernate注释来映射这个简单的模型。我尝试建模是提供商具有全局评级,并且全局评级实体的标识符与提供商实体的标识符相同(单向OneToOne),换句话说,我希望实体全局评级中的外键同时是主的和外部的,但是提供商实体也具有实体全局评级的外键。这可能吗?

  • 我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)

  • 我对下面的问题有很大的麻烦。我有一个实体“home”,我在代码中的两个不同位置使用它。问题是,需要根据使用实体的类将其映射到不同的表。 有办法做到我描述的那样吗?

  • 错误结果为 “OneToOne关系的JPA问题:外键引用的列数错误。应为2” 如何为join测试表指定主键? 表A:列id与表B:列test_id映射