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:Stock
和StockDailyRecord
。注意 @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;
}
希望这有帮助,我知道它令人困惑 :)
我想我理解属性 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:Stock
和StockDailyRecord
。注意 @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;
}
希望这有帮助,我知道它令人困惑 :)