谁能在hibernate中解释mappedBy?我是hibernate的新手,需要使用一对多和多对一的关系。它是我对象中的双向关系,因此我可以从任一方向遍历。mappedBy是推荐的方法,但是,我无法理解。有人能解释一下:推荐的使用方法是什么?它解决了什么目的?为了我的例子,这里是我的带注释的类:Airline OWNS很多 AirlineFlights很多都 AirlineFlights属于ONE Airline航空公司:@Entity @Table(name="Airline")public class Airline {
private Integer idAirline;
private String name;
private String code;
private String aliasName;
private Set<AirlineFlight> airlineFlights = new HashSet<AirlineFlight>(0);
public Airline(){}
public Airline(String name, String code, String aliasName, Set<AirlineFlight> flights) {
setName(name);
setCode(code);
setAliasName(aliasName);
setAirlineFlights(flights);
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="IDAIRLINE", nullable=false)
public Integer getIdAirline() {
return idAirline;
}
private void setIdAirline(Integer idAirline) {
this.idAirline = idAirline;
}
@Column(name="NAME", nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = DAOUtil.convertToDBString(name);
}
@Column(name="CODE", nullable=false, length=3)
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = DAOUtil.convertToDBString(code);
}
@Column(name="ALIAS", nullable=true)
public String getAliasName() {
return aliasName;
}
public void setAliasName(String aliasName) {
if(aliasName != null)
this.aliasName = DAOUtil.convertToDBString(aliasName);
}
@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name="IDAIRLINE")
public Set<AirlineFlight> getAirlineFlights() {
return airlineFlights;
}
public void setAirlineFlights(Set<AirlineFlight> flights) {
this.airlineFlights = flights;
}}编辑:数据库架构:AirlineFlights的idAirline为ForeignKey,航空公司没有idAirlineFlights。这使得AirlineFlights成为所有者/识别实体?从理论上讲,我希望航空公司成为航空公司的所有者。
3 回答

qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
通过@JoinColumn
在两个模型上指定,您没有双向关系。你有两个单向关系,并且有一个非常令人困惑的映射。你告诉两个模型他们“拥有”IDAIRLINE专栏。实际上只有其中一个真的应该!'正常'的事情是完全@JoinColumn
偏离@OneToMany
一边,而是将mappedBy添加到@OneToMany
。
@OneToMany(cascade = CascadeType.ALL, mappedBy="airline")public Set<AirlineFlight> getAirlineFlights() { return airlineFlights;}
这告诉Hibernate“在我找到配置的东西上查看名为'airline'的bean属性。”

神不在的星期二
TA贡献1963条经验 获得超6个赞
MappedBy信号休眠,关系的关键在另一边。
这意味着虽然您将两个表链接在一起,但这些表中只有一个对另一个表有外键约束。MappedBy允许您仍然从不包含约束的表链接到另一个表。

牧羊人nacy
TA贡献1862条经验 获得超7个赞
mappedby
为自己说话,它告诉hibernate不要映射这个字段。它已经被这个字段[name =“field”]映射。
字段在另一个实体中(name of the variable in the class not the table in the database)
..
如果你不这样做,hibernate将映射这两个关系,因为它不是同一个关系
所以我们需要告诉hibernate只在一侧进行映射并在它们之间进行协调。
添加回答
举报
0/150
提交
取消