注释类+;cfg.xml=org.hibernate.MappingException:未知实体
这个问题在这里已经被描述了很多次,但我没有看到任何有效的建议如何消除它 下面是两个没有答案的相同问题: 我将再次描述这个问题 一个简单的教程应用程序 hibernate-core-5.3.1.Final hibernate-annotations-3.5.6-Final hibernate-jpa-2.0-api-1.0.0.Final 主类注释类+;cfg.xml=org.hibernate.MappingException:未知实体,hibernate,mappingexception,Hibernate,Mappingexception,这个问题在这里已经被描述了很多次,但我没有看到任何有效的建议如何消除它 下面是两个没有答案的相同问题: 我将再次描述这个问题 一个简单的教程应用程序 hibernate-core-5.3.1.Final hibernate-annotations-3.5.6-Final hibernate-jpa-2.0-api-1.0.0.Final 主类 package main; import org.hibernate.Session; import org.hibernate.SessionF
package main;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class Main {
public static void main(String[] args) {
Configuration conf = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
builder.applySettings(conf.getProperties());
ServiceRegistry registry = builder.build();
SessionFactory sessionFactory = conf.buildSessionFactory(registry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Doe");
employee.setSalary(1000000);
session.save(employee);
transaction.commit();
sessionFactory.close();
}
}
package main;
import javax.persistence.*;
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@GeneratedValue
@Column(name = "ID")
private int id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "SALARY")
private int salary;
public Employee() {}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
员工类别
package main;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class Main {
public static void main(String[] args) {
Configuration conf = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
builder.applySettings(conf.getProperties());
ServiceRegistry registry = builder.build();
SessionFactory sessionFactory = conf.buildSessionFactory(registry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Doe");
employee.setSalary(1000000);
session.save(employee);
transaction.commit();
sessionFactory.close();
}
}
package main;
import javax.persistence.*;
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@GeneratedValue
@Column(name = "ID")
private int id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "SALARY")
private int salary;
public Employee() {}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
hibernate.cfg.xml文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/world</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.verifyServerCertificate">false</property>
<property name="hibernate.connection.useSSL">true</property>
<property name="hibernate.connection.requireSSL">false</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.format_sql">true</property>
<mapping class="main.Employee"/>
</session-factory>
</hibernate-configuration>
org.hibernate.dialogue.mysql5dialogue
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/world
根
根
假的
真的
假的
真的
创造
真的
例外情况
INFO:HHH10001001:连接属性:{user=root,password=**,verifyServerCertificate=false,usesssl=true,requireSSL=false}
2018年6月26日上午10:54:38 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
信息:HHH10001003:自动提交模式:错误
2018年6月26日上午10:54:38 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl$PooledConnections
信息:HH000115:休眠连接池大小:20(最小值=1)
2018年6月26日上午10:54:38 org.hibernate.dialogue.dialogue
信息:HH000400:使用方言:org.hibernate.dialogue.mysql5dialogue
2018年6月26日上午10:54:39 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources
信息:HH000476:正在执行导入脚本“org.hibernate.tool.schema.internal.exec”。ScriptSourceInputNonExistentImpl@5026735c'
线程“main”org.hibernate.MappingException中的异常:未知实体:main.Employee
位于org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:684)
位于org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1692)
位于org.hibernate.event.internal.AbstractSaveEventListener.SaveWithGenerateId(AbstractSaveEventListener.java:122)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
位于org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
位于org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
位于org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:709)
位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:701)
位于org.hibernate.internal.SessionImpl.save(SessionImpl.java:696)
在main.main.main(main.java:26)
@实体
存在
存在映射class=“main.Employee”
我请求帮助确定问题的原因。
请不要使用configuration.addAnnotatedClass(Employee.class)
和创建hbm文件。
我尝试过的这些方法都很有效。
我对上述案例特别感兴趣。- 您使用的是hibernate 5.3.1,因此不需要hibernate-annotations-3.5.6-Final
- 对于hibernate 5,声明如下类:
} }import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { final StandardServiceRegistry registry = new StandardServiceRegistryBuilder() .configure() // configures settings from hibernate.cfg.xml .build(); return new MetadataSources( registry ).buildMetadata().buildSessionFactory(); }catch(Exception e) { e.printStackTrace(); throw new RuntimeException("There was an error building the factory...!"); }
- 在您的主要方法中:
Session session = HibernateUtil.getSessionFactory().openSession();