Hay un ejemplo que es completamente similar a su caso en el Hibernate reference documentation. Justo antes de este ejemplo, encontrarás las explicaciones. Aquí está el ejemplo, que coincide con su problema (Usuario es el cuadro A, y el Cliente es el cuadro B):
@Entity
class Customer {
@EmbeddedId CustomerId id;
boolean preferredCustomer;
@MapsId("userId")
@JoinColumns({
@JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
@JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
})
@OneToOne User user;
}
@Embeddable
class CustomerId implements Serializable {
UserId userId;
String customerNumber;
//implements equals and hashCode
}
@Entity
class User {
@EmbeddedId UserId id;
Integer age;
}
@Embeddable
class UserId implements Serializable {
String firstName;
String lastName;
//implements equals and hashCode
}
Nota: sería mucho más simple de que tenías un identificador sustituto para esas dos tablas. A menos que esté obligado a tratar con un esquema heredado, hágase un favor y use claves sustitutivas.
¿Pero sabes si hay algunos problemas si cambio en lugar de poner la anotación de OneToOne en el cliente, poner OneToMany en la clase de usuario? – rascio
Tendrás que convertirla en una asociación OneToMany/ManyToOne bidireccional. –
Al hacerlo, obtengo 'Attribute" userId "tiene una asignación inválida en este contexto' dentro de' CustomerId' –