3

我正在使用休眠,并且我有两个表(旧的,它们不能重组),如下所示

表 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。我已经用这三种方法尝试过,但没有成功:

  1. 和上面的代码一模一样。
  2. 像这样更改 referencedColumnName 值

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

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

如果这甚至是可能的??如果有任何帮助,将不胜感激!

4

1 回答 1

0

我认为 JPA 注释 @MapsId 可能在这里为您工作:

http://docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html

在 TableA 类中,对 tableB 属性试试这个:

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

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

于 2012-09-04T23:18:04.733 回答