我遇到的情况是,很少有表(TableA和TableB)与同一张表(TableC)具有一对一关系。 TableA和TableB不相关。我设计的表格如下。
TableA
- key
- something
- c_ref_key
TableB
- key
- something
- c_ref_key
TableC
- key
- something
当我使用休眠逆向工程从该数据库生成JPA实体时,它将在TableA和TableB中为TableC创建多对一关系。通常,要创建一对一关系,我会将TableA主键作为TableC的主键,但是由于我还有其他表(TableB),这些表也与TableC具有一对一的关系,因此我无法做到这一点。因此,我不得不在TableA和TableB中使用TableC的外键(这在JPA中导致多对一的关系)。 还有其他方法可以保持一对一关系吗?或生成的JPA实体中至少有一对一的关系?
答案 0 :(得分:0)
您可以将@OneToOne休眠映射与@JoinColumn一起使用以创建外键。以下是架构的最基本实现,您可以根据需要对其进行扩展。
TableA.java
@Entity(name = "TABLE_A")
public class TableA {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long key_a;
private String something;
@OneToOne
@JoinColumn(name = "c_ref_key", referencedColumnName = "key_c")
private TableC c_ref_key;
}
TableB.java
@Entity(name = "TABLE_B")
public class TableB {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long key_b;
private String something;
@OneToOne
@JoinColumn(name = "c_ref_key", referencedColumnName = "key_c")
private TableC c_ref_key;
}
TableC.java
@Entity(name = "TABLE_C")
public class TableC {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long key_c;
private String something;
}
我在MySql数据库上测试了该架构,并且运行良好。