java usar Problemas de JPA @JoinColumn al unirse a columnas de clave no primaria




llave compuesta jpa (2)

Quiero conectar la tabla basada en la unión de una dirección, aquí está mi código:

Class Person {

@id
String person_sk;

int person_id;

String Person_name;

@OneToMany
@joinColumn (name="person_reference_id")
List<address> getAddresses() {}

}

class Address
{

@id
int person_reference_id (referred from Person);

@id
int address_id;

@id
int phone_id;

String street_name, zip_code;

}

Ahora cuando obtengo GetAddress, no funciona, porque mi unión se basa en la columna person_ref_id y @id (primaryKey) en la clase Person es person_sk.

Si uso referencedColumn, entonces tampoco funciona.


  1. JPA no permite referencias a columnas que no sean PK .

  2. La propiedad ReferencedColumn se utiliza para especificar la columna de unión, cuando hay un PK compuesto en la tabla a la que se hace referencia .

¿Cómo puedo hacer que esto funcione?

Normalice su base de datos para usar relaciones PK-FK comunes. Si es necesario, defina PK compuesto.


Modelo de datos inusual, es posible que desee volver a pensarlo.

Además, normalmente lo mejor es definir un @OneToMany utilizando un mappedBy y un @ManyToOne inverso.

JPA no admite directamente su modelo de datos, pero si está utilizando EclipseLink, puede definir OneToManyMapping con un DescriptorCustomizer y usar las claves externas o condiciones de combinación que necesite.







jpa