2009-06-07 12 views
14

El siguiente no funciona:Hibernate: ¿se utiliza mappedBy en la clase que amplía otra clase anotada como JoinedSubclass?

@Entity 
class Owner { 

    @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}) 
    protected Set<B> getBSet() { 
    .. 
    } 

} 

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
class A { 
    @ManyToOne 
    public Owner getOwner() { 
    ... 
    } 
} 

@Entity 
class B extends A { 

} 

Se hace una excepción como tal: org.hibernate.AnnotationException: Referencia mappedBy una propiedad de entidad de destino desconocido: B.user en propietario.

Estoy tratando de evitar copiar la propiedad "owner" en la clase B (que en consecuencia "desnormalizar" y copiar la clave del propietario en ambas tablas generadas para la entidad A y B). Además, me gustaría tener A y B en una tabla separada y no tener que usar un discriminador usando la herencia SingleTable.

Además, no puedo averiguar cómo hacer algo similar al usar @OneToOne entre A y B (y no tener B extender A).

Respuesta

0

Verificaría dos veces su implementación real. Usé su código de muestra y después de agregar un @Id todo funcionó como se esperaba. Incluso IntelliJ dice que getBSet() está asociado con B.owner.

+0

¿Realmente lo ejecutó y creó la fábrica de sesiones? Gracias - Lo comprobaré dos veces. No utilicé este mismo código exacto. Acabo de sacar de un ejemplo real que tuve que hace el mismo tipo de cosas ... – GreenieMeanie

+0

Sí, lo ejecuté. Es por eso que mencioné el @ID. El SF se quejó de la @id que faltaba. Después de eso, el SF construyó bien. Podría haber jurado que escribí esa frase exacta, ¡ja! ¡Buena suerte! – danieljimenez

6

Prueba agregar targetEntity = Transaction.class. Esto funcionó para mí cuando estaba usando la herencia SINGLE_TABLE. No lo intenté con JOIN.

@Entity 
class Owner { 

    @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}, targetEntity = Transaction.class) 
    @Where(clause = "tableType='I'") 
    protected Set<B> getBSet() { 
    .. 
    } 

} 
+0

Funciona como un encanto para mí también (estoy usando 'InheritanceType.TABLE_PER_CLASS') – Numbernick

10

Es una rareza de Hibernate, pero es deliberada. Tengo un blog post con información de antecedentes, enlaces y una solución alternativa para la solución JOINED.

Cuestiones relacionadas