Hibernate polymorphism
Esta é uma questão de polimorfismo Hibnerate e uma questão de design de modelo de dados; eles estão entrelaçados. Eu usei o Hibernate no passado e gostei, mas às vezes acho difícil pensar em algo que não seja um design trivial. Nem uma batida no Hibernate; apenas uma observação de que o ORM em geral pode ser desafiado
Acho que esta é uma pergunta do Hibernate 101, mas não tenho certeza. O que estou tentando alcançar pode nem ser possível.
Tenho uma classe abstrata Fruit que será subclassificada em Apple e Orange. Eu tenho uma classe de nota que representa notas ou comentários sobre maçãs e laranjas. Uma Apple ou Orange pode ter muitas anotações associadas, mas apenas uma Apple ou Orange será associada a uma determinada anotaçã
Aqui estão os esboços das classes, onde eu estou omitindo para onde vão os IDs dos objetos e as propriedades das maçãs que os distinguem das laranjas. Por enquanto, não tenho muita opinião sobre qual estratégia de herança do Hibernate eu us
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;
}
}
Aqui está a classe Note atualmente implementada, na qual vemos que ela possui campos para Apple e Orange. A falha ou deselegância nesse design é que uma instância de nota única apontará apenas para Apple ou Orange e nunca para ambos. Portanto, se uma nota estiver vinculada a uma maçã, o campo laranja será supérfluo e sem graça e vice-vers
// 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;
}
...
}
No entanto, esta é a classe Note que eupensauero basear meu design, mas não sei como pensar sobre isso com relação à anotação do Hibernate e ao mapeamento de tabel
// A note about a fruit:
public class Note {
private String theNote;
private Fruit fruit;
...
}
whereupon fruit será uma instância da Apple ou da Orang
Essa última classe do Note, com referência a uma Fruit, que realmente conterá uma Apple ou Orange, pode até ser reconciliada com o mapeamento do Hibernate ORM? Se sim, alguém pode falar sobre como.