이것은 Hibnerate 다형성 질문 및 데이터 모델 디자인 질문입니다. 그들은 뒤죽박죽이다. 나는 과거에 최대 절전 모드를 사용했는데, 을 즐겼다. 그러나 가끔 사소한 디자인에 대해서 을 생각하는 것이 어렵다고 생각한다. 최대 절전 모드가 아닙니다. 단지 ORM이 일반적으로 어려울 수 있다는 관찰.최대 절전 모드 다형성
이것은 최대 절전 모드 101 질문이라고 생각하지만 확실하지 않습니다. 내가 성취하려는 것은 심지어 가능하지 않을 수도 있습니다.
나는 사과 과 오렌지색으로 서브 클래스 화 될 추상 클래스의 과일을 가지고있다. 사과와 오렌지에 관한 노트 나 코멘트를 나타내는 노트 클래스가 있습니다. . Apple이나 Orange는 많은 노트를 가질 수 있지만 오직 하나의 Apple 또는 Orange 만 주어진 Note와 연결된 이됩니다.
다음은 클래스의 스케치입니다. 여기서는 지금 객체 ID가 생략 된 부분과 Oleges와 을 구별하는 사과 속성을 생략했습니다. 당분간 나는 내가 사용하는 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 에 바인딩 된 경우 Orange 입력란은 불필요하고보기 흉하고 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;
}
...
}
그러나, 이것은 내가 내 디자인의 기준이 생각 노트 클래스입니다,하지만 난 주석 및 테이블 매핑을 최대 절전 모드에 대하여 으로 이것에 대해 생각하는 방법을 잘 모르겠어요 :
// A note about a fruit:
public class Note {
private String theNote;
private Fruit fruit;
...
}
그러면 과일은 Apple 또는 Orange 인스턴스 중 하나입니다.
실제로 Apple이나 Orange를 보유 할 Fruit에 대한 참조가 Hibernate ORM 매핑과 조화 될 수 있습니까? 그렇다면 어떻게 누군가가 이야기 할 수 있습니까?
MySQL 데이터베이스를 통해 실행되는 코드로 인해 비슷한 문제가 있습니다. 내 관련 질문으로 나를 도울 용의가 있습니까? 여기에 링크가 있습니다 : http://stackoverflow.com/questions/25252541/generatedvalue-for-a-java-abstract-superclass-over-mysql – CodeMed