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.
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 :)
thank u
Nice, Saved my day!
Thanks A lot!!!
Thanks Viral
think u very much u saved my day :)
yup, this save my day too. a big thank you.
thanks .
It worked
Sir,
I have been searching for the solution for the long time.
LOve you…..
Thank you Boss.
I was having the errors:
javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
and
org.hibernate.AnnotationException: No identifier specified for entity: com.classifieds.entity.Test
But i didnt notice the second one. Actually the @Id missing was the issue.
Thanks
Thanks Viral.
thnx alot…yu really did a grt a job
thanks a lot man, was stuck on this for an hour.
Thanks a lot this solved my issue.
Thanks viral… so much..
For me this was happening because I had wrong Import statement ( I had @Id annotation in place )
import org.springframework.data.annotation.Id;
in place of
import javax.persistence.Id;