mappedBy 作为拥有关系的字段

mappedBy as the field that owns the relationship

我想我理解属性 mappedBy 如果放在 @OneToMany 字段中意味着什么(即表示字段类型的 table 具有此 table 声明了 @OneToMany(mappedBy="...") ,但我不完全理解它的语法(或者最后它的意思 -> 矛盾)。

根据 documentation:

mappedBy

public abstract String mappedBy

The field that owns the relationship.

Required unless the relationship is unidirectional.

Default: ""

文档讨论的是哪个字段? mappedby的值应该匹配什么,在哪个table?

看看这个 example。本例中的一对多关系涉及两个class:StockStockDailyRecord。注意 @OneToMany stockDailyRecords 字段 class Stock:

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

所以在这种情况下,它表示 StockDailyRecord class 中的字段 stock(不要与 class Stock 混淆)拥有关系。我认为更令人困惑的是,在这种情况下,字段名称和 class 是相同的。这种情况也很常见,因为您倾向于按照惯例通过该字段的 class 名称的小写来引用另一方的关系名称(例如 stock for Stock).

因此 mappedBy 属性实际上属于 StockDailyRecord class。因此,这意味着 StockDailyRecord 将处理持久化 Stock class.

中引用的 stockDailyRecords

mappedBy 属性值中引用的名称是 class 字段名称,而不是 table 列名称。

这就是这种关系的 StockDailyRecord 方面的样子:

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

希望这有帮助,我知道它令人困惑 :)