gpt4 book ai didi

java - 组织.hibernate.AnnotationException : No identifier specified for entity

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:12 26 4
gpt4 key购买 nike

我有一个 groovy 实体 ClientInvoiceAttachmentExt,它扩展了 java 实体 ClientInvoiceAttachment。 ClientInvoiceAttachment 具有 @Id 注释,但仍然看到“没有为实体指定标识符”错误

这是我的堆栈轨迹

[Mar 03 17:11:54] ERROR | org.springframework.web.context.ContextLoader | Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collaborationAPI': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.dc.apps.collaborationportal.security.service.CollaborationSecurityService com.dc.apps.collaborationportal.core.api.CollaborationAPI.security; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collaborationSecurityService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.dc.apps.collaborationportal.feature.service.FeatureService com.dc.apps.collaborationportal.security.service.CollaborationSecurityService.featureService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'featureService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.dc.core.api.Services com.dc.apps.collaborationportal.feature.service.FeatureService.api; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'services': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.dc.core.api.SearchAPI com.dc.core.api.Services.search; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'searchAPI': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private transient org.hibernate.SessionFactory com.dc.core.entity.service.impl.QueryService.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is com.dc.core.common.exception.BaseApplicationException: org.hibernate.AnnotationException: No identifier specified for entity: com.dc.apps.collaborationportal.ebilling.model.impl.ClientInvoiceAttachmentExt

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.dc.apps.collaborationportal.ebilling.model.impl.ClientInvoiceAttachmentExt
at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:268)
at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:223)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:686)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:720)
at com.dc.core.entity.support.CustomFieldsSessionFactoryBean.buildSessionFactory(CustomFieldsSessionFactoryBean.java:252)
... 94 more

我的 pom 依赖项

    <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<!-- this is the latest version that works with lucene-core 3.0.3
(which we are stuck with until jackrabbit supports later versions) -->
<version>3.3.0.Final</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>ejb3-persistence</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>

这是我的 Java 类

package com.dc.apps.collaborationportal.ebilling.model.impl;

import javax.persistence.AssociationOverride;
import javax.persistence.Embedded;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

import org.hibernate.annotations.Entity;

import com.dc.core.common.annotations.AttributeMetadataDefaults;
import com.dc.core.common.annotations.EventDefaults;
import com.dc.core.common.annotations.EventHandlerDefaults;
import com.dc.core.entity.model.IPersistentEntityInstance;
import com.dc.core.entity.model.impl.File;
import com.dc.core.events.enums.EventTypeEnum;
import com.dc.core.security.annotation.AttributeReadPermission;
import com.dc.core.security.annotation.AttributeWritePermission;
import com.dc.core.security.annotation.ContainerReference;

@Entity
@EventDefaults({
@EventHandlerDefaults(eventType = EventTypeEnum.OnBeforeCreate, beanName = "checksumInvoiceAttachmentCommand"),
@EventHandlerDefaults(eventType = EventTypeEnum.OnBeforeCreate, beanName = "encryptInvoiceAttachmentCommand") })
public class ClientInvoiceAttachment implements IPersistentEntityInstance {

private static final long serialVersionUID = 1L;
private Long id;

private File attachment;

private String checksum;

private String invoiceNumber;

@Embedded
@AssociationOverride(name = "fileData", joinColumns = @JoinColumn(name = "attachment_file_data_id"))
public File getAttachment() {
return attachment;
}

public String getChecksum() {
return checksum;
}

@Transient
@AttributeMetadataDefaults(defaultDisplay = true)
public String getFileName() {
if (attachment == null) return "";
return attachment.getName();
}

@Id
@GeneratedValue
public Long getId() {
return id;
}

public String getInvoiceNumber() {
return invoiceNumber;
}

public void setAttachment(File attachment) {
this.attachment = attachment;
}

public void setChecksum(String checksum) {
this.checksum = checksum;
}

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

public void setInvoiceNumber(String invoiceNumber) {
this.invoiceNumber = invoiceNumber;
}

}

这是我的常规类

package com.dc.apps.collaborationportal.ebilling.model.impl

import com.dc.core.api.Services;

import java.util.List
import javax.persistence.Column
import javax.persistence.OneToMany
import javax.persistence.ManyToMany
import javax.persistence.ManyToOne
import javax.persistence.Cacheable
import javax.persistence.Transient
import javax.persistence.JoinColumn
import javax.persistence.Embedded
import javax.persistence.Id
import javax.persistence.GeneratedValue
import javax.persistence.OneToOne
import javax.persistence.AssociationOverride
import javax.persistence.Lob
import javax.persistence.FetchType
import javax.persistence.Entity
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Indexed
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Store;
import org.hibernate.annotations.NamedQueries
import org.hibernate.annotations.NamedQuery
import org.hibernate.envers.Audited
import org.hibernate.envers.NotAudited
import org.hibernate.annotations.Cascade
import org.hibernate.annotations.Type
//import org.hibernate.annotations.Index
import org.hibernate.annotations.LazyCollection
import org.hibernate.annotations.LazyCollectionOption
import org.hibernate.annotations.Formula
import org.hibernate.annotations.Fetch
import org.hibernate.annotations.FetchMode
import org.hibernate.annotations.BatchSize
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import org.springframework.beans.BeansException
import com.dc.core.entity.enums.VersionStatusEnum
import com.dc.core.behavior.command.model.ICommandResult
import com.dc.core.behavior.command.model.impl.CommandResult
import com.dc.core.behavior.command.model.IEntityInstanceCommand
import com.dc.core.entity.model.IPersistentEntityInstance
import com.dc.core.behavior.trackchanges.model.IEntityChangeset
import com.dc.core.security.model.IContainer
import com.dc.core.security.annotation.ContainerReference
import com.dc.core.security.annotation.Encrypted
import com.dc.core.collaboration.enums.CollaborationRequestStatus
import com.dc.core.collaboration.model.ICollaborationParcel
import com.dc.core.collaboration.model.ICollaborationFeatureDetail
import org.hibernate.annotations.Cache
import org.hibernate.annotations.CacheConcurrencyStrategy


@javax.persistence.Entity
class ClientInvoiceAttachmentExt extends com.dc.apps.collaborationportal.ebilling.model.impl.ClientInvoiceAttachment implements IAmGroovy, Serializable {

@Autowired
protected transient Services services;

private static final long serialVersionUID = 711967972L;
public java.lang.String getCreatedBy() {
return this.createdBy;
}

public void setCreatedBy(java.lang.String createdBy) {
this.createdBy = createdBy;
}

protected createdBy;

public java.lang.String getUpdatedBy() {
return this.updatedBy;
}

public void setUpdatedBy(java.lang.String updatedBy) {
this.updatedBy = updatedBy;
}

protected updatedBy;

public java.sql.Timestamp getCreatedAt() {
return this.createdAt;
}

public void setCreatedAt(java.sql.Timestamp createdAt) {
this.createdAt = createdAt;
}

protected createdAt;

public java.sql.Timestamp getUpdatedAt() {
return this.updatedAt;
}

public void setUpdatedAt(java.sql.Timestamp updatedAt) {
this.updatedAt = updatedAt;
}

protected updatedAt;

protected transient ApplicationContext applicationContext;

}

最佳答案

您的问题场景是继承映射。 Id 字段在您的父类(super class)中,但您的子类又如何,它们将如何与父类相关。

有不同的策略来映射继承层次结构。

  1. 使用鉴别器值(单表)
  2. 每个具体类的表格
  3. 每个子类的表(如果父类是抽象的)

我认为您缺少与上述相关的注释。

在基于鉴别器的方法中..您需要按如下方式注释您的父类:

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)  
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="ParentClass")

在你的子类中:

@DiscriminatorValue("childClasss")

请引用一些关于继承映射的教程,如 this one或者你可以谷歌它。

关于java - 组织.hibernate.AnnotationException : No identifier specified for entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com