@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Problem {
@ManyToOne
private Person person;
}
@Entity
@DiscriminatorValue("UP")
public class UglyProblem extends Problem {}
@Entity
public class Person {
@OneToMany(mappedBy="person")
private List<UglyProblem> problems;
}
내가 뭘 하려는지 분명히 생각합니다. @ManyToOne 사람이 UglyProblem 클래스에 상속 될 것으로 기대합니다. 그러나 다음과 같은 예외가있을 것입니다. "UglyProblem 클래스 (mappedBy ="person ")에 해당 속성이 없습니다."@OneToMany가 최대 절전 모드에서 상속과 함께 작동하지 않는 이유
나는 모두 this입니다. Emmanuel Bernard가이 배경에 대한 이유를 설명하는 게시물을 찾을 수 없었습니다.
불행하게도, 최대 절전 모드 설명서에 따라 "@MappedSuperclass 무시로 슈퍼 클래스에서 속성 매핑되지 않습니다."
이public class A { private int foo; } @Entity public class B extens A { }
다음
foo
은 의미가 클래스 B에 대한 매핑되지 않습니다 필드 :
이 잘 나는 이것이 내가이 두 클래스가 있다면 것을 의미한다 생각합니다. 나는 이런 식으로 뭔가가있는 경우 그러나 :
@Entity
public class Problem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class UglyProblem extends Problem {
private int levelOfUgliness;
public int getLevelOfUgliness() {
return levelOfUgliness;
}
public void setLevelOfUgliness(int levelOfUgliness) {
this.levelOfUgliness = levelOfUgliness;
}
}
을 나는 클래스 UglyProblem이 fileds id
및 name
과 같은 테이블을 사용하여 매핑 할 두 클래스를 기대합니다. (실제로 이것은 정확하게 발생합니다. 나는 방금 다시 확인했습니다.)
CREATE TABLE "problem" (
"DTYPE" varchar(31) NOT NULL,
"id" bigint(20) NOT NULL auto_increment,
"name" varchar(255) default NULL,
"levelOfUgliness" int(11) default NULL,
PRIMARY KEY ("id")
) AUTO_INCREMENT=2;
내 질문으로 돌아 간다 :
내가 @ManyToOne 사람이 UglyProblem 클래스에 의해 상속 될 것으로 예상 나는이 표를 가지고있다.
다른 모든 매핑 된 필드가 상속되므로 ManyToOne 관계에 대해이 예외를 적용 할 이유가 없습니다.
그래, 나는 그것을 보았다. 사실, 필자는 필자의 경우 읽기 전용 솔루션을 사용했다. 그러나 나의 질문은 "왜 ..."이었습니다. 나는 최대 절전 모드 팀의 멤버가 제공 한 설명이 있다는 것을 알고있다. 나는 그것을 발견 할 수 없었고 그래서 내가 왜 물었습니다.
이 디자인 결정의 동기를 찾고 싶습니다.
(내가이 문제에 직면 한 방법에 관심이 있다면 : 나는 최대 절전 모드 3을 사용하여 빌드 된 프로젝트를 상속 받았다. 그것은 Jboss 4.0.something + hibernate가 이미 존재했다는 것이다. 제이 보스 4.2.2에 나는
당신 9 월 4 일에 당신의 편집에 대한 자세한 내용을 추가해야합니다.List를 @OneToMany (mappedBy = "person") 매핑 대신 List으로 지정하면 문제의 성격이 바뀝니다. 이전에 Person을 문제 목록에 매핑하려고한다고 생각했기 때문에 (Ugl –