java - hibernate 无法在注释方法中指定通用属性标识符

标签 java hibernate jpa

我为所有实体创建一个基类,每个新实体类都扩展它。 在基类中,我对 orm 使用注释,代码如下:

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;
}}

然后我创建一个类如下:

@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;
}}

但是,当我执行示例来测试我的类时,出现以下异常:

    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)

最佳答案

我找到了答案,我必须对 BaseEntity 类(父类)使用 @MappedSuperclass。

关于java - hibernate 无法在注释方法中指定通用属性标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200881/

相关文章:

hibernate - JPA 2 Criteria API 中的 Hibernate Restrictions.sqlRestriction 等效吗?

java - Hibernate 约束在级联保存时失败

jakarta-ee - WildFly部署: Unable to create EntityManager with SynchronizationType

java - JPA2 唯一约束 : do I really need to flush?

java - 如何创建仅传递请求路径的规则 - urlrewritefilter

java - 如何在java中将FileInputStream转换为字符串?

mysql - 为什么这里发出 'SHOW WARNINGS'查询? (JPA/hibernate/MySQL)

java - 比较 2 个日期 javafx

java - 从 Spring MVC @RestController 返回 View

java HTTPConnection 连接到 ip