2010-06-22 28 views
9

¿Hay alguna manera de decirle a Hibernate que ajuste una columna en un to_char cuando lo usa para unir a otra tabla o, a la inversa, convierte un NUMBER en un VARCHAR? Tengo una situación en la que tengo una tabla que contiene una columna de clave genérica de tipo VARCHAR que almacena el Id de otra tabla que es un Número. Obtengo una excepción de SQL cuando Hibernate ejecuta el SQL que genera y usa '=' para comparar las dos columnas.JPA o Hibernate: unir tablas en columnas de diferentes tipos

Gracias ...

P.S. Sé que esto no es ideal, pero estoy atascado con el esquema, así que tengo que enfrentarlo.

Respuesta

13

Esto debería ser posible usando una fórmula en su uno-uno. Desde la sección 5.1.22. Column and formula elements (solución también se menciona en este previous answer):

column y formula atributos pueden incluso pueden combinar dentro de la misma asignación propiedad o asociación a expreso, por ejemplo, exótico unirse condiciones.

<many-to-one name="homeAddress" class="Address" 
     insert="false" update="false"> 
    <column name="person_id" not-null="true" length="10"/> 
    <formula>'MAILING'</formula> 
</many-to-one> 

Con anotaciones (si está usando Hibernate 3.5.0-Beta-2 +, ver HHH-4382):

@ManyToOne 
@Formula(value="(select v_pipe_offerprice.offerprice_fk from v_pipe_offerprice where v_pipe_offerprice.id = id)") 
public OfferPrice getOfferPrice() { return offerPrice; } 

O puede comprobar el @JoinColumnsOrFormula: Gracias

@ManyToOne 
@JoinColumnsOrFormulas(
{ @JoinColumnOrFormula([email protected](value="SUBSTR(product_idnf, 1, 3)", referencedColumnName="product_idnf")) }) 
@Fetch(FetchMode.JOIN) 
private Product productFamily; 
+2

tanto ... la anotación @JoinColumnsOrFormula funcionó perfectamente. Usted, señor, es un caballero y un erudito. – user373614

+0

@ user373614 De nada. –

+0

¿Qué es lo que significa " 'MAILING'"? – Carlos

Cuestiones relacionadas