# Who generates foreign key? hibernate or database?

**URL:** <https://discourse.hibernate.org/t/who-generates-foreign-key-hibernate-or-database/4057>\
**Category:** Hibernate ORM\
**Created:** [April 21, 2020, 10:36pm UTC](https://discourse.hibernate.org/t/who-generates-foreign-key-hibernate-or-database/4057 "2020-04-21T22:36:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mehdi.sarf](https://avatars.discourse-cdn.com/v4/letter/m/3d9bf3/32.png) [@mehdi.sarf](https://discourse.hibernate.org/u/mehdi.sarf)\
**Post date:** [April 21, 2020, 10:36pm UTC](https://discourse.hibernate.org/t/who-generates-foreign-key-hibernate-or-database/4057/1 "2020-04-21T22:36:31Z")

</div>

I’ve created a table like this:

```auto
CREATE TABLE employee (
   id int(11) NOT NULL AUTO_INCREMENT,
   first_name varchar(45) DEFAULT NULL,
   last_name varchar(45) DEFAULT NULL,
   PRIMARY KEY(id)
)

```

as You see, I’ve used: `AUTO_INCREMENT`

Then Why should I use @GeneratedValue in my Entity Class while I’ve specified **auto increment** in the definition of table to make it self-incremental?

**My Entitiy Class:**

```auto
@Entity
@Table(name = "employee")
public class Employee{

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

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;
.
.
.
}

```

if database is going to generate primary key, then why should I specify the way of generation of primary key in entity class?

who generates foreign key? hibernate or database?
