为了账号安全,请及时绑定邮箱和手机立即绑定

谁能在hibernate中解释mappedBy?

谁能在hibernate中解释mappedBy?

慕的地10843 2019-08-06 14:52:55
谁能在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属性。”


查看完整回答
反对 回复 2019-08-06
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

MappedBy信号休眠,关系的关键在另一边。

这意味着虽然您将两个表链接在一起,但这些表中只有一个对另一个表有外键约束。MappedBy允许您仍然从不包含约束的表链接到另一个表。


查看完整回答
反对 回复 2019-08-06
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

mappedby为自己说话,它告诉hibernate不要映射这个字段。它已经被这个字段[name =“field”]映射。
字段在另一个实体中(name of the variable in the class not the table in the database)..

如果你不这样做,hibernate将映射这两个关系,因为它不是同一个关系

所以我们需要告诉hibernate只在一侧进行映射并在它们之间进行协调。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 490 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号