我如何使用注释在具有非主键列的 2 个实体之间加入?
How do i join between 2 entities with column other than primary key using annotations?
我有 2 个 table 的雇员和地址。每个都有主键 empId 和 addressId 是顺序生成的
员工Class:
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;
}
地址Class
public class 地址 {
@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 来保存这两个实体。这是我的主要 class.
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);
代码运行成功。但是在我的地址 table 中,emp_Id 列包含主键而不是 emp_id 列。
如何获取 "thinkerId" 作为地址 table 中的值?
谢谢。
在 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;
}
我有 2 个 table 的雇员和地址。每个都有主键 empId 和 addressId 是顺序生成的
员工Class:
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;
}
地址Class
public class 地址 {
@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 来保存这两个实体。这是我的主要 class.
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);
代码运行成功。但是在我的地址 table 中,emp_Id 列包含主键而不是 emp_id 列。
如何获取 "thinkerId" 作为地址 table 中的值?
谢谢。
在 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;
}