sql >> Base de Datos >  >> RDS >> Oracle

Mapeo de Hibernate:unir dos tablas con una tabla de asociación, pero con un giro

Puede usar la anotación @JoinTable después de @OneToOne para señalar la tabla de la tarjeta, por lo que no necesitará una entidad para la tarjeta, pero si la tabla de la tarjeta no es solo una tabla relacional, podría asignar la tarjeta en Usuario como @OneToOne y tiene un método @Transient 'getAddress()' que devuelve 'this.card.getAddress()', pero en la entidad de la tarjeta debe asignar la relación entre Dirección y Tarjeta(@OneToOne(mappedBy='card_id')), y en Dirección que podría mapear card_id como @Id.

Primera alternativa

Cliente:

@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;

Segunda alternativa

Cliente:

@OneToOne(mappedBy="cust_id")
private Card card;

...
@Transient
public Address getAddress(){
 return this.card == null ? null : this.card.getAddress();
}

Tarjeta:

@OneToOne(mappedBy="card_id")
private Address address;

Dirección:

@Id
private String card_id;

En el segundo caso, la tarjeta tiene un pk integrado que está formado por dos fks (cliente y dirección)

Tarjeta:

@EmbeddedId
private CustomerAddressPK id;

CustomerAddressPK

@Embeddable
public class CustomerAddressPK(){

  private String cust_id;
  private String card_id;
}