2012-06-14 13 views
6

Tengo dos tablas:Hibernate OneToOne se unió con el único pero no primaria clave

  1. usuarios:

    • user_id (primaria)

    • etc ..

  2. users_info

    • id (primaria)

    • user_id (única)

    • etc ..

me gustaría crear un OneToOne relación de user a user_info en el campo user_id. Tenga en cuenta que es único pero no primario. ¿Se puede hacer en Hibernate? Lo que sea que esté haciendo, Hibernate intenta usar el campo users_info.id en lugar del campo u sers_info.user_id.

@OneToOne(mappedBy="user_id", cascade = {CascadeType.ALL}, fetch=FetchType.LAZY, optional=true) 
@JoinColumn (name="user_id")  
public UserInfo getUserInfo() { return userInfo; } 
public void setUserInfo(UserInfo userInfo) { this.userInfo = userInfo; } 
private UserInfo userInfo; 

Respuesta

2

¿Por qué querría una clave "única" que sea una asignación de 1-1 Y una ID de sustituto? Es redundante Simplemente haga que las dos PK sean iguales ya que es una asignación de 1-1.

+0

mientras estoy de acuerdo con usted, un cliente me impuso este 'requisito' y tuve que implementarlo. Sí, aún me despierto con sudores fríos al respecto ... – Namphibian

0

Sí, esto debería funcionar. En one-to-one o many-to-one tiene una clave principal en la primera tabla y una clave externa en la segunda tabla.

0

La asignación debería funcionar como ha definido la columna de la tabla para unirse. Pero una sola cosa no estoy seguro ya que definió todas las anotaciones sobre el método getter, por lo que funcionará de la misma manera.

2

En User usted debe tener:

@OneToOne(mappedBy="user", cascade = CascadeType.ALL, fetch=FetchType.LAZY, optional=true) 
public UserInfo getUserInfo() { return userInfo; } 

Y en UserInfo:

@OneToOne 
@JoinColumn(name="user_id") 
public User getUser() { return user; } 

Tener una mirada here. Es el segundo ejemplo de mapeo uno a uno.

Cuestiones relacionadas