2011-07-11 17 views
0

私は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注釈を使用して、次のコードを持っています。

  1. COMPANY(IDフィールド)
  2. FLIGHT(IDフィールドとCOMP_IDフィールド)
  3. COMPANY_MANY_TO_ONE_FLIGHT(二つのフィールド:MANY_TO_ONE_COMPANY_idとflights_id)
  4. され、3つのテーブルがあり、

ただし、最後のテーブルCOMPANY_MANY_TO_ONE_FLIGHTは、冗長なhibernateによって追加されたリレーションテーブルです。

明らかに、FLIGHTテーブルには外部キーCOMP_IDがあり、冗長関係テーブルを削除するのは妥当です。

どうすればこのような状況を回避できますか?注釈を修正することのように。あなたは一般的な関連性を調べることができます

@OneToMany(mappedBy="ownerCompany") 
private Set<Flight> flights = new HashSet<Flight>(); 

ここで休止状態の注釈とともにmappend:

答えて

関連する問題