Java 在hibernate中连接到复合主键的某个属性

Java 在hibernate中连接到复合主键的某个属性,java,hibernate,jpa,persistence,composite-key,Java,Hibernate,Jpa,Persistence,Composite Key,我使用的是hibernate,我有两个表(遗留的,它们无法重构),如下所示 表A @Entity @Table(name = "tableA") public Class TableA implements Serializable { @EmbeddedId private TableAId tableAId; @OneToOne(mappedBy = "tableA") private TableB tableB; // getters, setters,

我使用的是hibernate,我有两个表(遗留的,它们无法重构),如下所示

表A

@Entity
@Table(name = "tableA")
public Class TableA implements Serializable {
    @EmbeddedId private TableAId tableAId;

    @OneToOne(mappedBy = "tableA")
    private TableB tableB;

    // getters, setters, hashCode and equals ommited
}
表A的复合Id

@Embeddable
public class TableAId implements Serializable {
    protected int id1;
    protected String id2;
    protected int id3;
    // getters, setters, hashCode and equals ommited
}
表B

@Entity
public class TableB implements Serializable {
    @OneToOne
    @JoinColumn(name = "tableB", referencedColumnName = "id3")
    protected TableA tableA;
    // getters, setters, hashCode and equals ommited
}
从上面的代码可以看出,我需要表B使用表的复合键的一个或多个(不是全部)属性连接表A。我已经尝试过以下三种方法,但都没有成功:

  • 与上面的代码完全相同
  • 像这样更改referencedColumnName值

    referencedColumName = "tableAId.id3"
    
  • 在TableA的pojo实体中添加复合复合键的属性,如下所示:

    // TableA
    @Column(name = "id1", insertable = false, updatable = false)
    private Integer id1;
    

  • 我想知道这是否可行???,如果有任何帮助将不胜感激

    我认为JPA注释@MapsId可能适合您:

    在TableA类中,对tableB属性尝试以下操作:

    @MapsId("id3")
    @OneToOne(mappedBy = "tableA")
    private TableB tableB;
    

    从TableB类中的tableA属性中删除@JoinColumn注释。

    我已经检查了您提到的注释,但这是为了在连接属性位于另一个表中时使用(tableA,不像示例中的TableB),您找到解决方案了吗?如果我记得没有,我可能已经解决了