jmo*_*ira 5 java persistence hibernate jpa composite-key
我正在使用休眠,并且我有两个表(遗留的,它们无法重组),如下所示
表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
}
Run Code Online (Sandbox Code Playgroud)
表A的复合ID
@Embeddable
public class TableAId implements Serializable {
protected int id1;
protected String id2;
protected int id3;
// getters, setters, hashCode and equals ommited
}
Run Code Online (Sandbox Code Playgroud)
表B
@Entity
public class TableB implements Serializable {
@OneToOne
@JoinColumn(name = "tableB", referencedColumnName = "id3")
protected TableA tableA;
// getters, setters, hashCode and equals ommited
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码可以看出,我需要表 B 使用表的组合键的一个或多个(不是全部)属性来连接表 A。我已经尝试过以下三种方法但没有成功:
像这样更改referencedColumnName值
referencedColumName = "tableAId.id3"
Run Code Online (Sandbox Code Playgroud)在 TableA 的 pojo 实体中添加组合复合键的属性,如下所示:
// TableA
@Column(name = "id1", insertable = false, updatable = false)
private Integer id1;
Run Code Online (Sandbox Code Playgroud)如果这可能的话?如果有任何帮助,我们将不胜感激!
我认为 JPA 注释 @MapsId 可能适合您:
http://docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html
在 TableA 类中,尝试对 tableB 属性执行此操作:
@MapsId("id3")
@OneToOne(mappedBy = "tableA")
private TableB tableB;
Run Code Online (Sandbox Code Playgroud)
还要从 TableB 类的 tableA 属性中删除 @JoinColumn 注释。
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |