Присоединение к определенному свойству составного первичного ключа в спящем режиме

Я использую спящий режим, и у меня есть две таблицы (устаревшие, их нельзя реструктурировать), как показано ниже

Таблица А

@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

@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. Добавление свойств, которые составляют составной ключ, также в сущности pojo TableA, например:

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

Я буду признателен, если это вообще возможно ??, если это любая помощь !!


person jmoreira    schedule 04.09.2012    source источник
comment
вы нашли решение для этого?   -  person Lakshmi    schedule 27.06.2018
comment
если я помню, я этого не делал, я, вероятно, обошел это   -  person jmoreira    schedule 29.06.2018


Ответы (1)


Я думаю, что аннотация JPA @MapsId может сработать для вас здесь:

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

В классе TableA попробуйте это для свойства tableB:

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

Также удалите аннотацию @JoinColumn из свойства tableA в классе TableB.

person JamesB    schedule 04.09.2012
comment
Я уже проверил указанную вами аннотацию, но она предназначена для использования, когда свойство соединения находится в другой таблице (TableA, а не в TableB, как в примере) - person jmoreira; 05.09.2012