私はHibernateを初めて使用しています。私は、Hibernateでは、Javaクラスをデータベーステーブルにマッピングすることはしばしばリレーションテーブルを必要とすることに気付きます。リレーションテーブルは必要ではありません(一対多リレーションやその逆のように)。例えばHibernateのdbテーブルへの一対多(または一対多)の関連付けでの関係テーブルの回避
:
私は、当社のクラスと、同社は多くのフライトを持つことが可能なフライトクラス、(1フライトに会社から多くの関連付け)しています。クラスがデータベースに正常にマッピングされている
@Entity
@Table(name = "COMPANY")
public class Company {
@Id
private Long id;
@OneToMany
private Set<Flight> flights = new HashSet<Flight>();
......
getter and setter methods
......
}
@Entity
@Table(name="FLIGHT")
public class Flight{
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "COMP_ID")
private Company ownerCompany;
......
getter and setter methods
......
}
:
は、私は、Hibernate注釈を使用して、次のコードを持っています。
- COMPANY(IDフィールド)
- FLIGHT(IDフィールドとCOMP_IDフィールド)
- COMPANY_MANY_TO_ONE_FLIGHT(二つのフィールド:MANY_TO_ONE_COMPANY_idとflights_id) され、3つのテーブルがあり、
ただし、最後のテーブルCOMPANY_MANY_TO_ONE_FLIGHTは、冗長なhibernateによって追加されたリレーションテーブルです。
明らかに、FLIGHTテーブルには外部キーCOMP_IDがあり、冗長関係テーブルを削除するのは妥当です。
どうすればこのような状況を回避できますか?注釈を修正することのように。あなたは一般的な関連性を調べることができます
@OneToMany(mappedBy="ownerCompany")
private Set<Flight> flights = new HashSet<Flight>();
ここで休止状態の注釈とともにmappend:
はい、それは働きます! 〜より – xiaohan2012