我有两张员工和地址表。每个都有通过序列生成的主键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”作为地址表中的值?
非常感谢。
在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),换句话说,我希望实体全局评级中的外键同时是主的和外部的,但是提供商实体也具有实体全局评级的外键。这可能吗?
我对下面的问题有很大的麻烦。我有一个实体“home”,我在代码中的两个不同位置使用它。问题是,需要根据使用实体的类将其映射到不同的表。 有办法做到我描述的那样吗?
我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)
错误结果为 “OneToOne关系的JPA问题:外键引用的列数错误。应为2” 如何为join测试表指定主键? 表A:列id与表B:列test_id映射