この例をチェックしてください。この例では、1 対多の関係に関係する 2 つのクラスがあります:Stock
とStockDailyRecord
. @OneToMany
stockDailyRecords
class のフィールドに注目してくださいStock
:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
public Set<StockDailyRecord> getStockDailyRecords() {
return this.stockDailyRecords;
}
したがって、この場合、クラスのフィールド (クラスと混同しないでください) がリレーションシップを所有していると言ってstock
いStockDailyRecord
ますStock
。これをさらに混乱させていると思うのは、この場合、フィールドの名前とクラスの両方が同じであることです。慣例により、そのフィールドのクラス名を小文字で反対側の関係の名前を参照する傾向があるため、この種のケースも非常に一般的です (たとえばstock
for Stock
)。
したがって、mappedBy
属性は実際にはクラスによって所有されStockDailyRecord
ます。つまり、はクラス内で参照されているものをStockDailyRecord
永続化します。stockDailyRecords
Stock
属性値で参照されるmappedBy
名前は、テーブルの列名ではなく、クラス フィールド名です。
そして、これはStockDailyRecord
その関係の側面がどのように見えるかです:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "STOCK_ID", nullable = false)
public Stock getStock() {
return this.stock;
}
これが役立つことを願っています、私はその混乱を知っています:)