【问题标题】:ManyToOne and OneToMany多对一和一对多
【发布时间】:2017-06-05 05:51:17
【问题描述】:

我使用 Hibernate 并且我有实体:

@Data
@Entity
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @Column(name = "country_nm")
    private String countryName;
}

@Data
@Entity
public class City {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @Column(name = "city_nm")
    private String cityName;
}

国家可以有很多城市,城市只有一个国家。 关联这些实体的最佳方式是什么?

1) 在City 类中添加City city 字段并在其上方添加@ManyToOne@JoinColumn 注释?因此,我们将有两个表:countrycitycity 表将有 country_id 列。

2) 在Country 类和@OneToMany(mappedBy='country') 上面添加Country country 字段并在City 类中添加City city 字段并在它上面添加@ManyToOne 注释?在这种情况下,将有三个表:countrycity 和组合表country_city

【问题讨论】:

  • 没有“最好”的方法。这一切都取决于你想要什么和需要什么。但是,您描述的两种方式是不正确的,并且您对如何映射双向关联的理解是错误的。阅读休眠手册。
  • 谢谢,我正在做

标签: hibernate one-to-many many-to-one mappedby


【解决方案1】:

1) 在 City 类中添加 City 城市字段并添加 @ManyToOne 和 @JoinColumn 上面的注释?结果,我们将有两个表: country 和 city,city 表会有 country_id 列。

我想你的意思是在 City 类中添加 Country country 字段,是的,如果你的目标是单向关系,这将是正确的,但 joinColumn 不应该在拥有实体中,它应该在非拥有实体中所以你必须去 Country 类并在那里添加一个城市列表,并使用 @OneToMany 和 join 列注释它们。

2) 在 Country 类中添加 Country Country 字段和 @OneToMany(mappedBy='country') 在其上方并在 City 中添加 City 城市字段 类并在其上方添加@ManyToOne 注释?在这种情况下会有 是三个表:国家,城市和组合表country_city

这个解决方案有很多错误的地方,首先你不能有这样的“@oneToMany(mappedBy='country)”,你只能在你应用第一个解决方案并且你想让关系双向甚至是虽然这不会生成第三个类,但如果你想生成第三个类,你需要在你拥有的类中使用 @JoinTable 而不是 @JoinColumn

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 2011-03-08
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多