java - 未知实体:带有 Hibernate 5.3 的 java.lang.Class
问题描述
我是hibernate的新手,我已经看到了许多为Hibernate创建实用程序的方法。我认为这就是我的错误所在,但我不确定。(使用 Oracle 12c 和 Hibernate 5.3)。我的目标是尝试测试休眠将表存储到数据库(oracle)中的能力。我关心的是hibernateUtil,如果它是正确的/ hibernate.cfg.xml 在映射上是正确的/ 如果文件夹结构对于Web 应用程序servlet 是正确的/ 并且我的Requirements Bean 注释是否正确。我查看了其他帖子,但他们都指出了我修复的实体导入问题。谢谢您的帮助。
org.hibernate.MappingException: Unknown entity: java.lang.Class
at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:670)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1721)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:118)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:713)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:705)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:700)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:350)
at com.sun.proxy.$Proxy40.save(Unknown Source)
at com.hibernate.DAO.Requirement.addRequirement(Requirement.java:27)
at com.hibernate.DAO.Requirement.main(Requirement.java:40)
休眠.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">*******</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:TCS</property>
<property name="hibernate.connection.username">TCS</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="hibernate.show_sql">true</property>
<property name="hbm2ddl">create</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.jdbc.batch_size">10</property>
<mapping class="com.hibernate.beans.Requirements"/>
</session-factory>
</hibernate-configuration>
Requirements.java(我没有包括 getter 和 setter,因为它们不是必需的)
package com.hibernate.beans;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Requirements {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name="REQ_ID")
private long REQ_ID;
@Embedded
@Basic
@Column(name="Full_Name", nullable=false)
private Name name;
@Basic
@Column(name= "Account", nullable=false)
private String account;
@Basic
@Column(name= "Skills_Needed", nullable=false)
private String skillsNeeded;
@Basic
@Column(name= "Pending_Requirement", nullable=false)
private int pendingRequirement;
@Basic
@Column(name= "Status", nullable=false)
private String status;
}
需求.Java
package com.hibernate.DAO;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.hibernate.beans.Name;
import com.hibernate.beans.Requirements;
import com.hibernate.util.HibernateUtil;
public class Requirement {
private static void addRequirement() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
try {
session.beginTransaction();
Requirements re = new Requirements();
re.setName(new Name("Bob", "Steven"));
re.setAccount("Verizon");
re.setPendingRequirement(2);
re.setStatus("Pending");
re.setSkillsNeeded("C++");
session.save(Requirements.class);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
session.close();
}
}
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Requirement re = new Requirement(sessionFactory);
addRequirement();
}
}
文件夹结构
解决方案
推荐阅读
- python - 来自谷歌云视觉 API OCR 的逐行数据
- javascript - 如何在 JavaScript 中将纯文本转换为 Json 对象
- git - CVS2GIT 迁移失败 - 致命:标记:6885 未声明
- spring - 如何在 Spring Boot 配置中显式传递数据库名称?
- angularjs - ng-repeat:通过指令忽略多次插入相同的角度模板
- ios - 如何使用 swift 4 使用 post 功能将图像文件发送到服务器
- python - Python 给出 ImportError: No module named sqlalchemy.util._collections in pycharm
- java - JavaFX:有对话窗口时的Platform.exit()
- python - 使用更有效的方法处理数据,例如 python 中的并行
- ios - Firebase 删除帐户以及 iOS 上的数据库和存储