0

私は休止状態が初めてです。Hibernate では、Java クラスをデータベース テーブルにマッピングするときにリレーション テーブルが必要になることが多く、リレーション テーブルが必要ない場合もあります (1 対多のリレーションやその逆の場合など)。

例えば:

私は Company クラスと Flight クラスであり、会社は多くのフライト (Company から Flight への 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
    ......

}

クラスがデータベースに正常にマップされました。また、次の 3 つのテーブルがあります。

  1. COMPANY(ID フィールド)
  2. FLIGHT (ID フィールドと COMP_ID フィールド)
  3. COMPANY_MANY_TO_ONE_FLIGHT (2 つのフィールド: MANY_TO_ONE_COMPANY_id と flight_id )

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

明らかに、FLIGHT テーブルには外部キー COMP_ID があり、冗長なリレーション テーブルを削除することは合理的です。

そして、どうすればそのような状況を避けることができますか? 同様に、注釈を変更します。

4

1 に答える 1

3

@OneToManyアノテーションでmappedByプロパティを使用してみてください。

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

ここで、休止状態のアノテーションを使用した一般的なアソシエーションmappendを検索できます:http: //docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association

于 2011-07-11T11:26:14.473 に答える