When you are writing a piece of code from scratch a lot of time you do silly mistakes and still wonder why its not working. Well same thing happened the other day when I added a Hibernate Entity class in one project and was struggling to make it work.
The exception was:
org.hibernate.AnnotationException: No identifier specified for entity: net.viralpatel.hibernate.Employee
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:650)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1112)
at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1269)
at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:150)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:888)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:416)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:227)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:273)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1367)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
Code language: Java (java)
The error here is that in your Entity class, you have not defined a primary key. Thus specify either @Id
annotation or an @EmbeddedId
annotation.
So if you have an entity class Employee like below:
package net.viralpatel.hibernate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Column(name="employee_id")
private Long employeeId;
@Column(name="firstname")
private String firstname;
@Column(name="lastname")
private String lastname;
//Getter and Setter methods
}
Code language: Java (java)
And if you try to execute this, it will generate exception org.hibernate.AnnotationException: No identifier specified for entity: net.viralpatel.hibernate.Employee
So the solution is just add @Id to appropriate primary key column.
package net.viralpatel.hibernate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@Column(name="employee_id")
private Long employeeId;
@Column(name="firstname")
private String firstname;
@Column(name="lastname")
private String lastname;
//Getter and Setter methods
}
Code language: Java (java)
Thus every class defined as Entity with @Entity annotation, needs an @Id or @EmbeddedId property.
Hope that helps and reduce your debugging effort.
Java URL Encoder/Decoder Example - In this tutorial we will see how to URL encode/decode…
Show Multiple Examples in OpenAPI - OpenAPI (aka Swagger) Specifications has become a defecto standard…
Local WordPress using Docker - Running a local WordPress development environment is crucial for testing…
1. JWT Token Overview JSON Web Token (JWT) is an open standard defines a compact…
GraphQL Subscription provides a great way of building real-time API. In this tutorial we will…
1. Overview Spring Boot Webflux DynamoDB Integration tests - In this tutorial we will see…
View Comments
Thanks Viral.
Your tutorial really helped me save another nightout.
cheers to you!
Thanks a lot!!!
Thanks viral,
your suggestion has worked for me.
Thank you
And if you are sub-classing, there is a another silly mistake you (or at least I) can make which could produce the same exception.
Which is, the super-class needs to have the @MappedSuperclass annotation, otherwise all it's fields/columns are ignored.
Perfect. This is really hidden, you saved me.
Thanks for this.
If my entity class does not have any primary key, then what can be done to resolve this issue?
in hibernate it is mandatory to have at least one candidate key per table.
but my table doesnt have a primry key but has a foreign key how to do the same with annotations
I am also facing same issue ... i don't have a primary key for my table but i have a foreign key .... If you have the solution can you share it here
Thanks to Daniel Winterstein i had a series of abstract class and one @MappedSuperClass was missing thanks al ot.
thank u
Thank you...This is what exactly I was looking for..you made my day..Thanks again :)