2

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

根据文档

映射依据

public abstract String mappedBy

拥有关系的字段。

除非关系是单向的,否则是必需的。

默认: ””

文档在谈论哪个领域?mappedby应该匹配什么值,在哪个表中?

4

1 回答 1

2

看看这个例子。此示例中的一对多关系涉及两个类:StockStockDailyRecord。注意@OneToMany stockDailyRecords类中的字段Stock

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

所以在这种情况下,它的说法是类中的字段stockStockDailyRecord不要与 class 混淆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 回答