@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がHibernateの継承で動作しない理由
私が見つけたのはthisです。私はエマニュエル・バーナードがこの背後に理由を説明したポストを見つけることができませんでした。
残念ながら、Hibernateのマニュアルに従って「@MappedSuperclassが無視されるよう、スーパークラスからプロパティマッピングされていません。」
まあ、私はこれは私がこの2つのクラスがあればということだと思う:
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
と同じテーブルを使用してマッピングする両方のクラスを持っていることを期待しています。 (実際、これはまさに何が起こるか、私はもう一度チェックした)。私はこのテーブルを持っている:私は@ManyToOne人はUglyProblemクラスによって継承されることを期待
:
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関係に対してこの例外を作成する理由はありません。
ええ、私はそれを見ました。実際、私は私のケースでは読み取り専用ソリューションを使用しました。しかし、私の質問は「なぜ...」でしたか?私は、休止状態のメンバーの説明があることを知っています。私はそれを見つけることができませんでした、それが私が尋ねた理由です。
私はこの意思決定の動機づけを知りたいと思います。
(私がこの問題にどのように直面しているか興味があれば、私はHibernate 3を使ってビルドされたプロジェクトを継承しました)Jboss 4.0.something + hibernateは既にそこにありました。 JBossの4.2.2に、私は「@OneToMany mappedBy」の継承されたマッピングがあることを発見し、それが古い設定にうまく働いた...)
あなたは9月4日に、あなたの編集の詳細を追加する必要があります。以前はPersonを問題のリストにマッピングしたいと思っていたと思っていたと思うので、@OneToMany(mappedBy = "person")マッピングのリストだけでなくリストを指定すると、問題の性質が変わります(Ugl –