我遇到了這個錯誤:
org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl - Encountered a non-categorized annotated class [com.propfinancing.marketing.model.Property]; ignoring
我不明白這意味著什么,在互聯網上搜索并沒有給我太多幫助。
這是我的模型類:
package com.propfinancing.marketing.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity(name="Property")
@Table(name="property")
public class Property {
@Id
@GeneratedValue
@Column(name="id")
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
我正在嘗試使用 MariaDB 后端資料庫撰寫 Spring-Hibernate webapp。
我想做的第一步是讓 Hibernate 為我創建模式。我撰寫了一個命令列程式來使用 SchemaExport 自動創建表。這是什么代碼:
package com.propfinancing.marketing.bin;
import com.propfinancing.marketing.model.Property;
import java.io.File;
import java.io.FileReader;
import java.util.EnumSet;
import java.util.Properties;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
public class CreateTables {
public static void main(String[] args)
throws Exception {
FileReader reader = new FileReader(Paths.CLASSES.getAbsolutePath() File.separator "application.properties");
Properties properties = new Properties();
properties.load(reader);
properties.setProperty("hibernate.hbm2ddl.auto", "create");
Configuration cfg = new Configuration();
cfg.setProperties(properties);
StandardServiceRegistryBuilder sb = new StandardServiceRegistryBuilder();
sb.applySettings(cfg.getProperties());
StandardServiceRegistry standardServiceRegistry = sb.build();
MetadataSources metadataSources = new MetadataSources(standardServiceRegistry);
metadataSources.addAnnotatedClass(Property.class);
SchemaExport export = new SchemaExport();
export.create(EnumSet.of(TargetType.DATABASE), metadataSources.buildMetadata());
}
}
這很奇怪,我檢查了 org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl 的來源,它似乎從這個方法產生了錯誤:
private void categorizeAnnotatedClass(Class<?> annotatedClass, AttributeConverterManager attributeConverterManager) {
final XClass xClass = reflectionManager.toXClass( annotatedClass );
// categorize it, based on assumption it does not fall into multiple categories
if ( xClass.isAnnotationPresent( Converter.class ) ) {
//noinspection unchecked, rawtypes
attributeConverterManager.addAttributeConverter( (Class<? extends AttributeConverter>) annotatedClass );
}
else if ( xClass.isAnnotationPresent( Entity.class )
|| xClass.isAnnotationPresent( MappedSuperclass.class ) ) {
xClasses.add( xClass );
}
else if ( xClass.isAnnotationPresent( Embeddable.class ) ) {
xClasses.add( xClass );
}
else {
log.debugf( "Encountered a non-categorized annotated class [%s]; ignoring", annotatedClass.getName() );
}
}
但是,我的持久類用 @Entity 注釋,所以應該沒問題。
任何想法為什么 Hibernate 不喜歡我的模型類?
uj5u.com熱心網友回復:
我想到了。我正在使用一個自動遷移到 Jakarta EE 規范的 war 檔案將所有內容加載到 Tomcat。將測驗檔案遷移到 Jakarta EE 后,一切正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/433589.html
