Когда вы будете следовать спецификации JPA, вы заметите, что нет необходимости отображать tableC.Вы можете просто использовать объединяемую таблицу
Примерно так:
@Entity
public class TableA{
@Id
@column(name="ID")
public int id;
@ManyToMany
@JoinTable(name="TableC",
joinColumns = {@JoinColumn(name = "ID_TABLE_A", referencedColumnName="ID")},
inverseJoinColumns = {@JoinColumn(name = "ID_TABLE_B", referencedColumnName="ID")
})
public List<TableB> listOftableB;
}
@Entity
public class TableB{
@Id @column(name="ID")
public String id;
@OneToMany(mappedBy="listOftableB")
public List<TableA> listOftableA;
}
, если вы хотите отобразить что-то в JoinTable, вы также можете определить это как сущность.Вы можете отобразить tableC следующим образом
@Entity
public class TableC{
@EmbeddedId
private MyId id;
@ManyToOne
@JoinColumn(name = "ID_TABLE_A", insertable = false, updatable = false)
private TableB tableA;
@ManyToOne
@JoinColumn(name = "ID_TABLE_B", insertable = false, updatable = false)
private TableB tableB;
@Column(name="extra_field")
private String extraField;
}
@Embeddable
public class MyId{
@Column(name="ID_TABLE_A")
private int idTableA;
@Column(name="ID_TABLE_B")
private int idTableB;
// equals, hascode,...
}
Сделав объекты вставляемыми / обновляемыми false, вы можете сопоставить одни и те же свойства несколько раз.Другие свойства в id не подлежат обновлению, потому что вы сломаете свой pk.