我想我理解了mappedBy
如果放在一个@OneToMany
字段中的属性意味着什么(即表示字段类型的表有一个声明的表的外键@OneToMany(mappedBy="...")
,但我不完全理解它的语法(或最后它的含义 - > 矛盾)。
根据文档:
映射依据
public abstract String mappedBy
拥有关系的字段。
除非关系是单向的,否则是必需的。
默认: ””
文档在谈论哪个领域?mappedby
应该匹配什么值,在哪个表中?
我想我理解了mappedBy
如果放在一个@OneToMany
字段中的属性意味着什么(即表示字段类型的表有一个声明的表的外键@OneToMany(mappedBy="...")
,但我不完全理解它的语法(或最后它的含义 - > 矛盾)。
根据文档:
映射依据
public abstract String mappedBy
拥有关系的字段。
除非关系是单向的,否则是必需的。
默认: ””
文档在谈论哪个领域?mappedby
应该匹配什么值,在哪个表中?
看看这个例子。此示例中的一对多关系涉及两个类:Stock
和StockDailyRecord
。注意@OneToMany
stockDailyRecords
类中的字段Stock
:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
public Set<StockDailyRecord> getStockDailyRecords() {
return this.stockDailyRecords;
}
所以在这种情况下,它的说法是类中的字段stock
(StockDailyRecord
不要与 class 混淆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;
}
希望这会有所帮助,我知道它令人困惑:)