Это вопрос полиморфизма Гибнера и дизайн модели данных вопрос; они переплетены. Я использовал Hibernate в прошлом, и наслаждался этим, но иногда мне трудно думать про ничего, кроме тривиальных конструкций. Не стук в спящий режим; только наблюдение, что ОРМ в целом может быть сложной задачей.Полиморфизм гибернации
Я думаю, что это вопрос Hibernate 101, но я не уверен. То, что я пытаюсь достичь, возможно даже не возможно.
У меня есть абстрактный класс Фрукты, которые будут подклассифицированы в Apple и Orange. У меня есть класс Note, который представляет примечания или комментарии о яблоках и апельсинах. У Apple или Orange может быть много связанных с ним Notes , но только один 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;
}
}
Вот класс Примечания реализуется в настоящее время, в котором мы видим, что имеет поле для оба яблока и апельсина. Недостаток или несоответствие в этом дизайне состоит в том, что экземпляр одной заметки будет указывать только на один из Apple или Orange, и оба они оба. Поэтому, если примечание привязано к Apple, оранжевое поле является излишним и неприглядным, а наоборот.
// 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;
}
...
}
Однако это класс Обратите внимание, что я думаю, Я хочу основать свой дизайн, но я не знаю, как об этом думать относительно к Hibernate аннотации и таблицы отображения:
// A note about a fruit:
public class Note {
private String theNote;
private Fruit fruit;
...
}
, после чего фрукты будут либо экземпляром Apple, либо апельсином.
Может ли этот последний класс Note со ссылкой на Fruit, который фактически будет содержать Apple или Orange, даже будет согласован с Hibernate ORM mapping? Если да, может кто-нибудь, пожалуйста, поговорим о том, как это сделать.
У меня есть аналогичная проблема из-за моего кода, работающего над базой данных MySQL. Вы готовы помочь мне с моим родственным вопросом? Вот ссылка: http://stackoverflow.com/questions/25252541/generatedvalue-for-a-java-abstract-superclass-over-mysql – CodeMed