Entity and Table annotations. Understanding the exact differences between them
I am learning hibernate and have some questions about the differences between Entity and Table, and how they work together/independently?
Case 1:
@Entity
public class Person{
}
My understanding -
Entity name - Person
Table name in db - person
Case 2:
@Entity(name = "people")
public class Person{
}
My understanding -
Entity name - people
Table name in db - people
Case 3:
@Entity
@Table(name="people")
public class Person{
}
My understanding -
Entity name - Person
Table name in db - people
Case 4:
@Entity(name = "person")
@Table(name = "people")
public class Person{
}
My understanding -
Entity name - person
Table name in db - people
Case 5:
@Table(name="people")
public class Person{
}
My understanding -
Entity name - ??
Table name in db - people
Is my understanding of these five cases correct? Is there anything else I should know about the working of Entity and Table?
@Entity
is used to declare a class can be managed by Hibernate. It also defines the entity name through its name
attribute which is the name that we refer to when writing JPQL/HQL queries. If the entity name is not specified , it is default to the unqualified name of that entity class.
For example :
@Entity(name="People")
public class Person{
}
Then I need to use People
to refer to this entity when writing a JPQL/HQL query :
select p from People p;
@Table
defines the actual DB table name that an @Entity
is mapped to through its name attribute. If it is not specified , its default value will be equal to the entity name (i.e @Entity
's name
attribute)
Also @Table
only make senses if @Entity
is defined . Otherwise , just defining @Table
without @Entity
(i.e case 5) does not have any effect.
So to to summaries:
Case 1:
@Entity
public class Person {
}
Entity name = Person
DB Table name = Person
Case 2:
@Entity(name = "people")
public class Person {
}
Entity name = people
DB Table name = people
Case 3:
@Entity
@Table(name="people")
public class Person{
}
Entity name = Person
DB Table name = people
Case 4:
@Entity(name = "person")
@Table(name = "people")
public class Person{
}
Entity name = person
DB Table name = people
Case 5: Invalid