0

我已经阅读了几个关于使用 Hibernate 在表之间创建关联的示例,我有点困惑。我想首先知道将在数据库中创建多少个表,而无需像代码一样在另一侧指定任何注释:

@Entity
public class Flight implements Serializable {
    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinColumn(name="COMP_ID")
    public Company getCompany() {
        return company;
    }
    ...
} 

我怀疑两个表 Flight、Company 和 Flight 包含外键 Company_Id。我对吗?如果我在另一侧添加“mappedBy”有什么区别:

@Entity
public class Company {
    @OneToMany(mappedBy="company")
    public Set<Flight> getFlights() {
        ...
    }
}

第二种方法将创建多少个表?我想第二种方法建立了双向关联。这两种情况有什么实际区别?@ManyToMany 关联中的“mappedBy”注释也发生了什么?

4

2 回答 2

1

当您使用双向关系时,使用 mappedby 可以避免在两个表中存储关系的更改。从您的示例中,如果您删除 mappedby、flight 和 company,这两个表都将具有关系字段。

于 2013-04-20T16:20:10.973 回答
1

如果您没有在航班属性上添加任何注释,则将应用默认映射,即@Basic. 这意味着列表的全部内容将被序列化并存储在名为航班的列中。

这显然不是你想要的。您想要的是使其成为 Flight 中定义的 ManyToOne 关联的反面。就是@OneToMany(mappedBy = "company")这样。

除此之外,您的假设是正确的。ManyToOne 默认使用实体表中的连接列进行映射。使用 JoinColumn 注释允许为连接列指定一个不同于默认名称的名称(以及此连接列的其他属性)。

于 2013-04-20T15:25:39.720 回答