mappedBy作为拥有关系的字段

时间:2016-04-22 23:54:40

标签: java hibernate one-to-many mappedby

我想我理解了mappedBy属性在放入@OneToMany字段时的含义(即表示字段类型的表具有声明@OneToMany(mappedBy="...")的此表的外键,但我不完全理解它的语法(或者最后它的意思 - >矛盾)。

根据documentation

  

的mappedBy

     

public abstract String mappedBy

     

拥有这种关系的领域。

     

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

     

默认:""

文档在谈论哪个字段? mappedby的值应该匹配什么,以及在哪个表中?

1 个答案:

答案 0 :(得分:2)

查看此example。在此示例中,一对多关系涉及两个类:StockStockDailyRecord。请注意课程@OneToMany中的stockDailyRecords Stock字段:

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

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

所以mappedBy属性实际上归StockDailyRecord类所有。这意味着StockDailyRecord将处理stockDailyRecords类中引用的Stock的持久性。

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

这就是该关系的StockDailyRecord方面的看法:

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

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