在hibernate中使用连接时映射实体类

时间:2015-11-19 08:58:54

标签: java mysql hibernate

在MySQL内部我创建了一些表格。我有一个包含所有项目的表用户。但现在我想估计谁有项目清单。来自tbl_items。

所以我的MySql我做了这样的事情:

enter image description here

但是现在如果我对列表项的映射有困难:

这是我的估计课程:

@Entity
@Table(name = "tbl_estimate")
@SecondaryTable(name = "tbl_order_items", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "fk_id_estimate_order", referencedColumnName = "id_estimate")})
public class Estimate {

    //Table estimate
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_estimate",table = "tbl_estimate")
    private Integer id ;

    @Column(table = "tbl_estimate")
    private Integer fkIdUserEstimate;

    @Column(table = "tbl_estimate")
    private Integer fkIdClientEstimate;


    //table order items
    @Column(table = "tbl_order_items")
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "fk_id_estimate_order", cascade = CascadeType.ALL)
    @Fetch(FetchMode.JOIN)
    private List<Item> itemList = new ArrayList<>();


....

有人可以给我一些指示吗?

1 个答案:

答案 0 :(得分:1)

首先,在使用JPA时,您应该在设计实体时忘记数据库的设计。映射外键id既不是必需的,也不是应该做的事情。 JPA是关于面向对象并隐藏数据库设计的细节。

如果您需要从OneToManyEstimate的{​​{1}},最简单的方法是通过Item

JoinColumn

然后,您的@Entity @Table(name = "tbl_estimate") public class Estimate { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id_estimate") private Integer id ; @JoinColumn(name = "estimate_id") @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Item> items = new ArrayList<>(); ... } - 表需要一个名为item的{​​{1}}表的外来列。或者,使用连接表:

estimate

这将需要一个名为estimate_id的表,其中列@Entity @Table(name = "tbl_estimate") public class Estimate { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id_estimate") private Integer id ; @JoinTable(name = "estimate_item") @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Item> items = new ArrayList<>(); ... } estimate_item,每个表都有一个表的外键。可以使用estimate_id注释中的items_id嵌套@JoinColumn来覆盖列的名称。

使用JPA时,最好从实体的设计开始,并基于此创建表。这种方法通常会提供最干净的设计。

此外,您使用inverseJoinColumn - 属性错误,它的值不是数据库中的外键,而是实体关系另一侧的变量名。