2

mappedByフィールドに配置された場合の属性の意味を理解したと思います@OneToMany(つまり、フィールドのタイプを表すテーブルには、宣言されたこのテーブルへの外部キーがありますが、@OneToMany(mappedBy="...")その構文を正確に理解していません(または最後にその意味- >矛盾)。

ドキュメントによると:

マッピングされた作成者

public abstract String mappedBy

リレーションシップを所有するフィールド。

リレーションシップが一方向でない限り、必須です。

デフォルト: ""

ドキュメントが話しているフィールドはどれですか? どのテーブルで、どの値をmappedby一致させる必要がありますか?

4

1 に答える 1

2

この例をチェックしてください。この例では、1 対多の関係に関係する 2 つのクラスがあります:StockStockDailyRecord. @OneToMany stockDailyRecordsclass のフィールドに注目してくださいStock:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
public Set<StockDailyRecord> getStockDailyRecords() {
    return this.stockDailyRecords;
}

したがって、この場合、クラスのフィールド (クラスと混同しないでください) がリレーションシップを所有していると言ってstockStockDailyRecordますStock。これをさらに混乱させていると思うのは、この場合、フィールドの名前とクラスの両方が同じであることです。慣例により、そのフィールドのクラス名を小文字で反対側の関係の名前を参照する傾向があるため、この種のケースも非常に一般的です (たとえばstockfor Stock)。

したがって、mappedBy属性は実際にはクラスによって所有されStockDailyRecordます。つまり、はクラス内で参照されているものをStockDailyRecord永続化します。stockDailyRecordsStock

属性値で参照されるmappedBy名前は、テーブルの列名ではなく、クラス フィールド名です。

そして、これはStockDailyRecordその関係の側面がどのように見えるかです:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "STOCK_ID", nullable = false)
public Stock getStock() {
    return this.stock;
}

これが役立つことを願っています、私はその混乱を知っています:)

于 2016-04-23T00:24:07.507 に答える