Esta es una pregunta sobre el polimorfismo Hibnerate y una pregunta sobre el diseño del modelo de datos ; ellos están entrelazados. He usado Hibernate en el pasado, y lo he disfrutado, pero a veces me resulta difícil pensar en sobre cualquier cosa que no sean diseños triviales. No es un golpe en Hibernate; solo una observación de que el ORM en general puede ser un desafío.Polimorfismo Hibernate
Creo que esta es una pregunta de Hibernate 101, pero no estoy seguro. Lo que trato de lograr ni siquiera es posible.
Tengo una fruta de clase abstracta que se subclasificará en Apple y naranja. Tengo una clase Note que representa notas o comentarios sobre manzanas y naranjas. Una manzana o naranja puede tener muchas notas asociadas, pero solo una manzana o naranja será alguna vez asociada a una nota determinada.
Aquí hay bocetos de las clases, donde estoy omitiendo donde van las identificaciones del objeto y las propiedades de las manzanas que las distinguen de las naranjas . Por el momento, no estoy muy convencido de cuál es la estrategia de herencia de Hibernate que uso.
abstract public class Fruit {
}
// Apples have notes written about them:
public class Apple extends Fruit {
private Set<Note> note;
...
@OneToMany(cascade = CascadeType.ALL)
public Set<Note> getNote() {
return note;
}
}
// Oranges have notes written about them:
public class Orange extends Fruit {
private Set<Note> note;
...
@OneToMany(cascade = CascadeType.ALL)
public Set<Note> getNote() {
return note;
}
}
Aquí es la clase Nota implementado actualmente, en donde vemos que que tiene campos para tanto una manzana y una naranja. La falla o inelegancia en este diseño es que una instancia única de nota solo apuntará a una de Apple o Naranja, y nunca ambas. Por lo tanto, si una nota está vinculada a una manzana, el campo naranja es superfluo y antiestético, y viceversa.
// A note about an Apple or Orange
public class Note {
private String theNote;
private Apple apple;
private Orange orange;
...
// with the usual many to one mapping
@ManyToOne
@JoinColumn(name = "apple_id")
public Apple getApple() {
return apple;
}
// with the usual many to one mapping
@ManyToOne
@JoinColumn(name = "orange_id")
public Orange getOrange() {
return orange;
}
...
}
Sin embargo, esta es la clase de nota que yo creo quiero basar mi diseño , pero no estoy seguro de cómo pensar en esto con respecto a Hibernate mapeo anotación y tabla:
// A note about a fruit:
public class Note {
private String theNote;
private Fruit fruit;
...
}
donde la fruta será una instancia de Apple o naranja.
¿Puede esta última clase de Nota, con su referencia a una Fruta, que realmente tendrá una Manzana o Naranja, incluso conciliarse con el mapeo ORM de Hibernate? Si es así, ¿alguien puede hablar sobre cómo?
Tengo un problema similar debido a que mi código se ejecuta en una base de datos MySQL. ¿Estás dispuesto a ayudarme con mi pregunta relacionada? Aquí está el enlace: http://stackoverflow.com/questions/25252541/generatedvalue-for-a-java-abstract-superclass-over-mysql – CodeMed