org.hibernate.AnnotationException: No identifier specified for entity

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)

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 }

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 }

Thus every class defined as Entity with @Entity annotation, needs an @Id or @EmbeddedId property.

Hope that helps and reduce your debugging effort.

Get our Articles via Email. Enter your email address.

You may also like...

29 Comments

  1. Pramod says:

    Thanks Viral.
    Your tutorial really helped me save another nightout.
    cheers to you!

  2. Hernan says:

    Thanks a lot!!!

  3. prateek says:

    Thanks viral,

    your suggestion has worked for me.

  4. Hardik says:

    Thank you

  5. 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.

    • Baig says:

      Perfect. This is really hidden, you saved me.

  6. Mridula says:

    Thanks for this.
    If my entity class does not have any primary key, then what can be done to resolve this issue?

    • Alen Jain says:

      in hibernate it is mandatory to have at least one candidate key per table.

  7. apoorv says:

    but my table doesnt have a primry key but has a foreign key how to do the same with annotations

    • Ishvarya says:

      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

  8. Cristian Daniel Ortiz Cuellar says:

    Thanks to Daniel Winterstein i had a series of abstract class and one @MappedSuperClass was missing thanks al ot.

  9. mahender says:

    thank u

  10. Amar says:

    Thank you…This is what exactly I was looking for..you made my day..Thanks again :)

  11. sonam says:

    thank u

  12. Ahmad says:

    Nice, Saved my day!

  13. Resmi says:

    Thanks A lot!!!

  14. venky says:

    Thanks Viral

  15. hanita says:

    think u very much u saved my day :)

  16. ricardo says:

    yup, this save my day too. a big thank you.

  17. Chintan says:

    thanks .
    It worked

  18. suresh says:

    Sir,
    I have been searching for the solution for the long time.
    LOve you…..

  19. benoyprakash says:

    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.

  20. Jonathan says:

    Thanks

  21. Chandra says:

    Thanks Viral.

  22. akhib says:

    thnx alot…yu really did a grt a job

  23. Aamir says:

    thanks a lot man, was stuck on this for an hour.

  24. Ashok says:

    Thanks a lot this solved my issue.

  25. ucup says:

    Thanks viral… so much..

  26. GB says:

    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;

Leave a Reply

Your email address will not be published. Required fields are marked *