Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

hibernate can not specify a generic property identifier in annotation approach

I create a base class for all entities to every new entity class extend it. in base class I use annotation for orm, below code:

public class BaseEntity<I> implements IBaseEntity<I> {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false)
private I id;


public I getId() {
return id;
}

public void setId(I id) {
this.id = id;
}}

then I create a class as below:

@SuppressWarnings("serial")
@Entity
@Table(name = FoodEntity.TABLE_NAME, schema = "public")
public class FoodEntity extends BaseEntity<Long> {

public static final String TABLE_NAME = "T_Food";

@Column(name = "NAME", unique = true, nullable = false, length = 500)
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}}

but, when I execute a sample to test my classes, I get below exception:

    Initial SessionFactory creation failed.org.hibernate.AnnotationException: No identifier specified for entity: FoodEntity
Exception in thread "main" java.lang.ExceptionInInitializerError
at ir.msr.projects.crawler.HibernateUtil.buildSessionFactory(HibernateUtil.java:31)
at ir.msr.projects.crawler.HibernateUtil.<clinit>(HibernateUtil.java:14)
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: FoodEntity
at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:266)
at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:211)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:731)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:249)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
like image 538
Mohammad Sadegh Rafiei Avatar asked Sep 12 '25 17:09

Mohammad Sadegh Rafiei


1 Answers

I found my answer, I have to use @MappedSuperclass for BaseEntity Class(Parent Class).

like image 179
Mohammad Sadegh Rafiei Avatar answered Sep 15 '25 08:09

Mohammad Sadegh Rafiei