Java 在hibernate中连接到复合主键的某个属性
我使用的是hibernate,我有两个表(遗留的,它们无法重构),如下所示 表AJava 在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,
@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。我已经尝试过以下三种方法,但都没有成功:
referencedColumName = "tableAId.id3"
// 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),您找到解决方案了吗?如果我记得没有,我可能已经解决了