Это вопрос Hibnerate полиморфизма и дизайн модели данных
вопрос; они переплетены. Я использовал Hibernate в прошлом,
и наслаждался этим, но иногда мне трудно думать
ни о чем, кроме тривиальных замыслов. Не стучите в спящий режим; просто
наблюдение, что ORM в целом может быть сложным.
Я думаю, что это вопрос Hibernate 101, но я не уверен. То, чего я пытаюсь достичь, может даже оказаться невозможным.
У меня есть абстрактный класс Fruit, который будет разделен на Apple
и оранжевый. У меня есть класс Note, который представляет заметки или комментарии
о яблоках и апельсинах. Яблоко или апельсин могут иметь много нот
связано с ним, но когда-либо будет только один Apple или Orange
связанных с данной запиской.
Вот эскизы классов, где я пока опускаю, где
Идентификатор объекта, и свойства яблок, которые различают
их из апельсинов. В настоящее время я не очень уверен в том, какую стратегию наследования Hibernate я использую.
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;
}
}
Здесь реализован класс Note, в котором мы видим, что
у него есть поля для Apple и Orange. Недостаток или несоответствие
в этом дизайне, что один экземпляр заметки будет указывать только на
один из Apple или Orange, и никогда не оба. Так что, если примечание связано с
Яблоко, оранжевое поле лишнее и неприглядное, и
семафоре.
// 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;
}
...
}
Однако, это класс Note, который я думаю Я хочу основать свой
дизайн, но я не уверен, как относиться к этому с уважением
в спящий аннотации и отображение таблиц:
// A note about a fruit:
public class Note {
private String theNote;
private Fruit fruit;
...
}
, тогда фрукт будет экземпляром Apple или Orange.
Может ли последний класс Note со ссылкой на Fruit, который фактически будет содержать Apple или Orange, даже согласовываться с отображением Hibernate ORM? Если да, может кто-нибудь рассказать о том, как.