「single」、「married」などの値を持つ結婚状況のテーブルがあります。
外部キーとしてmarital_status_idを持つテーブルPersonがあります。
これをどのようにマッピングしますか?私はHibernateを初めて使用するので、どんな助けでもありがたいです。または、人と結婚歴の間に関係はなく、単なる参照であるため、これは必要ありませんか?
まず第一に、結婚歴は別のテーブルを必要としません(そうですか?本当に?)。1文字で処理できます(非常に効率的)
しかし、あなたの場合、
@Entity
@Table(name="PERSON")
Class Person(){
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 15, scale = 0)
private Long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="MARITAL_STATUS_ID")
MaritalStatus maritalStatus;
}
と
@Entity
@Table(name="MARITAL_STATUS")
Class MaritalStatus(){
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 15, scale = 0)
private Long id;
@OneToMany(mappedBy="maritalStatus")
Set<Person> persons;
}
結婚状況は、Javaで列挙型として表現して、不要な結合を除外する必要があります。これは、オプションがそれほど多くなく、変更されることはないためです。アノテーションを
確認してください:http: //docs.oracle.com/javaee/6/api/javax/persistence/Enumerated.html@Enumerated(EnumType.STRING)
1対1の関係を主張するのか、気にしないのか、また、クラスの代わりに列挙型を使用するのかどうかを指定していません。
このリンクは、テーブル間にこのような関係を持たせたい場合に、休止状態での1対1のマッピングに関するいくつかの有用な情報を提供します。1対1の例ただし、Hibernateの1対1マッピングはあまり推奨されておらず、次のように1対多のマッピングを使用できます。
@Entity
@Table(name = "Person")
public class Person {
@Id
@GeneratedValue
int id;
@OneToMany(mappedBy = "Person", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Private MaritalStatus;
}
@Entity
@Table(name = "MaritalStatus")
public class Person {
@Id
@GeneratedValue
int id;
@ManyToOne
Person person = new Person();
}
このアプローチは非常に単純ですが、クラスの代わりに列挙型を使用し、列挙型を使用してテーブルをマップすることをお勧めします。そのアプローチは実装するのが少し難しいです、そしてこの投稿はあなたが必要とするすべてのものをあなたに提供します:列挙型をテーブルにマッピングする
私は以下をしたいです
個人エンティティ:
@Entity
@Table(schema = "Person")
public class Person {
@Id
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "marital_status_id")
private MaritalStatus maritalStatus;
}
結婚状況エンティティ:
@Entity
@Table(schema = "MaritalStatus")
public class MaritalStatus {
@Id
private String id;
@Column(name = "status")
private String status;
}