谁能在hibernate中解释mappedBy?

谁能在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成为所有者/识别实体?

从理论上讲,我希望航空公司成为航空公司的所有者。


慕的地10843
浏览 491回答 3
3回答

qq_花开花谢_0

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

神不在的星期二

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

牧羊人nacy

mappedby为自己说话,它告诉hibernate不要映射这个字段。它已经被这个字段[name =“field”]映射。字段在另一个实体中(name of the variable in the class not the table in the database)..如果你不这样做,hibernate将映射这两个关系,因为它不是同一个关系所以我们需要告诉hibernate只在一侧进行映射并在它们之间进行协调。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java