Hibernate注释混乱

时间:2013-10-16 19:49:40

标签: java hibernate jpa

最近,我一直在学习Hibernate,我遇到了一些困难。我的第一个问题如下:我对以下条款非常困惑。

  1. 双向映射
  2. 多对一
  3. 因为据我所知,在rdbms中我们首先需要在父表中插入。然后我们可以在子表上插入,因此唯一可能的场景是一对多(第一个父级,然后是子级)。然后,多对一如何工作?其次,关于Hibernate的这种双向映射是什么。具体来说,不同类型的连接注释让我很困惑。我在下面列出这些注释。

    1.@JoinTable(name = "Tbale_Name", joinColumns = { @JoinColumn(name = "Column_Name") }, 
        inverseJoinColumns = { @JoinColumn(name = "Another_ColumnName") })
    
    2.@OneToMany(mappedBy="department")` this mappedby term 
    
    3.@PrimaryKeyJoinColumn
    

    请帮助我理解这些概念。

1 个答案:

答案 0 :(得分:1)

我要说的第一件事就是不考虑表格,而是用对象思考。

你试图用注释表达的是对象之间的关系,让hibernate解决如何持久化数据的问题。您显然可以手动检查SQL,但使用ORM的想法是相应地映射实体之间的关系,让ORM找出生成SQL等的复杂性。

值得注意的是父母 - >通过将mappedBy添加到关系的非拥有(子)侧,可以使用@ManyToOne映射子关系。然后,Hibernate将首先确定要插入数据库的实体。使用TransactionManager运行将强制执行多表插入的完整性。 Hibernate还将确定需要持久保存哪些实体,例如,如果您在多方面将新对象添加到现有对象上。

此外,值得理解的是,在某些情况下,它并不总是在父级中生成主键的数据库 - >孩子外键。它可以使代码生成标识符,而hibernate将依旧保留它们。

双向映射意味着对象实体彼此具有引用。即,您可以从第一个实体中检索第二个实体。双向映射支持一对多 或多对多。即OneToMany = a在其中一个实体上设置。多对多=在两个实体上设置。

JoinTable告诉hibernate数据库中的表可以用于一起映射到其他表。有关详细信息,请参阅JPA "@JoinTable" annotation。 JoinColumn告诉hibernate使用哪个列来实现两个实体之间的连接。 Hibernate需要这些来构造SQL。