Как сделать составной первичный ключ, используя два внешних ключа? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть три таблицы, в которых одна таблица использует внешний ключ двух других таблиц для создания составного первичного ключа. Теперь я использую @Embeddable, но так как оба ключа являются внешним ключом, Как я сейчас создам составной первичный ключ в Entity.

CREATE TABLE table1
(table1id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (table1id));

table2

CREATE TABLE table2
(table2id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (table2id));

table3

CREATE TABLE table3 (
   table1id INT NOT NULL,
   table2id INT NOT NULL,
   PRIMARY KEY (table1id, table2id),
   FOREIGN KEY (table1id) REFERENCES table1 (table1id),
   FOREIGN KEY (table2id) REFERENCES table2 (table2id)
);

Как преобразовать эту таблицу в Hibenate Entity.

 @Entity
 @Table(name="table3")
 class Table1 {
   @Id
   long table1id;
   //getter and setter
  }

 @Entity
 @Table(name="table3")
   class Table2 {
   @Id
   long table2id;
   //getter and Setter
   }

  @Entity
  @Table(name="table3")
  class Table3 {
     @EmbeddedId
     private table3PK table3PKId;

   //getter and Setter
   }


 @Embeddable
  Class table3PK{

  @ManyToOne
   @JoinColumn(name="table1Id" ,referencedColumnName="table1id")
  Table1 table1;

  @ManyToOne
  @JoinColumn(name="table2Id" ,referencedColumnName="table2id")
  Table2 table2;

  public table3PK(){

  }

  public table3PK(Table1 table1 ,Table2 table2){
   this.table1;
   this.table2;
  }


 }

}

1 Ответ

0 голосов
/ 21 ноября 2018

Непонятно, с какой проблемой вы сталкиваетесь;но вы можете попробовать использовать «производные идентификаторы» и отобразить ваши сущности следующим образом:

@Entity
public class Table1 {
    @Id
    long table1id;
    // ...
}

@Entity
public class Table2 {
    @Id
    long table2id;
    // ...
}

@Embeddable
public class Table3PK {
    long table1PK; // corresponds to PK type of Table1
    long table2PK; // corresponds to PK type of Table2
} 

@Entity
public class Table3 {
    @EmbeddedId
    private Table3PK id;

    @MapsId("table1PK") // maps table1PK attribute of embedded id 
    @ManyToOne
    Table1 table1;

    @MapsId("table2PK") // maps table2PK attribute of embedded id 
    @ManyToOne
    Table2 table2;

    // ...
}

Производные идентификаторы обсуждаются (с примерами) в спецификации JPA 2.2 в разделе 2.4.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...