当前位置: 首页 > 知识库问答 >
问题:

Hibernate映射异常:未知映射实体:主题

许学真
2023-03-14

我想映射类主题到主题表。

主题。JAVA

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;  
import javax.persistence.Table;
import javax.persistence.Column;

public class Themes
{
private int id;
private String theme;
private int orderInfo;
public Themes(String theme,int order_info)
{
    System.out.println("OK");
    this.theme=theme;
    this.orderInfo=order_info;
}
public int getId()
{
    return id;
}

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

public String getTheme()
{
    return theme;
}

public void setTheme(String theme)
{
    this.theme=theme;
}

public int getOrder()
{
    return orderInfo;
}

public void setOrder(int order_info)
{
    this.orderInfo=order_info;
}
}

主题。哈佛商学院。xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
   <class name="Themes" table="themes">
      <meta attribute="class-description">
     This class contains theme details. 
      </meta>
      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      <property name="text" column="text" type="string"/>
      <property name="orderInfo" column="order_info" type="int"/>
   </class>
</hibernate-mapping>

冬眠cfg。xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>
   <property name="hibernate.dialect">
      org.hibernate.dialect.MySQLDialect
   </property>
   <property name="hibernate.connection.driver_class">
      com.mysql.jdbc.Driver
   </property>

   <!-- Assume test is the database name -->
   <property name="hibernate.connection.url">
      jdbc:mysql://localhost/content_templating_data
   </property>
   <property name="hibernate.connection.username">
      root
   </property>
   <property name="hibernate.connection.password">

   </property>

   <!-- List of XML mapping files -->
   <mapping resource="themes.hbm.xml"/>
   <mapping resource="patterns.hbm.xml"/>
   <mapping resource="filler.hbm.xml"/>
   <mapping resource="sentences.hbm.xml"/>

</session-factory>
</hibernate-configuration>

我正在读取csv文件的内容,并希望使用以下代码将其插入数据库。

管理ata.java

import java.io.*;

import org.apache.log4j.BasicConfigurator;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class ManageData {
private static SessionFactory factory;
private static String csvfile="C:\\Users\\ANJANEY\\IdeaProjects\\hiveminds\\src\\file.csv";
private static String line="";
private static String splitby=",";
private static BufferedReader br=null;

private static SessionFactory getSessionFactory() {
    // create configuration using hibernate API
    Configuration configuration = new Configuration();
    configuration.setProperty("connection.driver_class",
            "com.mysql.jdbc.Driver");
    configuration.setProperty("hibernate.connection.url",
            "jdbc:mysql://localhost:3306/content_templating_data");
    configuration.setProperty("hibernate.connection.username", "root");
    configuration.setProperty("hibernate.connection.password", "");
    return configuration.buildSessionFactory();
}
public static void main(String args[])throws IOException {
    int count=0;
    try
    {
        factory=getSessionFactory();
        System.out.println("Factory Object created...");


    }
    catch (Throwable ex)
    {
        System.out.println("Failed to create Session Factory Object " + ex);
        //throw new ExceptionInInitializerError();
    }

    try {
        int order_info;
        br = new BufferedReader(new FileReader(csvfile));
        ManageData MD = new ManageData();

        line = br.readLine();
        int length=0;
        while ((line = br.readLine()) != null) {
            count++;
            String[] str = line.split(splitby);
            length=str.length;

            order_info = Integer.parseInt(str[2]);

            //Adding theme details in the theme table
            Integer themeID = MD.addTheme(str[1], order_info);


        }
    }
    catch(FileNotFoundException e)
    {
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    System.out.println("Done "+count);
}

//Method to add in theme table
public Integer addTheme(String theme,int order_info){

    Session session = factory.openSession();
    Transaction tx = null;
    Integer themeID = new Integer(0);

    try{
        tx = session.beginTransaction();

        Themes th=new Themes(theme,order_info);
        themeID = (Integer) session.save(th);
        System.out.println("OKAY");
        tx.commit();

    }catch (HibernateException e) {
        if (tx!=null) tx.rollback();
        e.printStackTrace();
    }finally {
        session.close();
    }
    return themeID;
}

我得到以下错误

线程“main”组织中出现异常。冬眠MappingException:未知实体:组织中的主题。冬眠impl。SessionFactoryImpl。getEntityPersister(SessionFactoryImpl.java:693)位于org。冬眠impl。SessionImpl。getEntityPersister(SessionImpl.java:1485)位于org。冬眠事件def。AbstractSaveEventListener。saveWithGenerateId(AbstractSaveEventListener.java:120)位于org。冬眠事件def。DefaultSaveOrUpdateEventListener。saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)位于org。冬眠事件def。DefaultSaveEventListener。saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)位于org。冬眠事件def。DefaultSaveOrUpdateEventListener。entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)位于org。冬眠事件def。DefaultSaveEventListener。org上的performSaveOrUpdate(DefaultSaveEventListener.java:50)。冬眠事件def。DefaultSaveOrUpdateEventListener。org上的onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)。冬眠impl。SessionImpl。fireSave(SessionImpl.java:713)位于org。冬眠impl。SessionImpl。在org上保存(SessionImpl.java:701)。冬眠impl。SessionImpl。在ManageData上保存(SessionImpl.java:697)。在ManageData上添加主题(ManageData.java:114)。main(ManageData.java:66)位于sun。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:57)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗。反思。方法在com上调用(Method.java:606)。intellij。rt.执行。应用阿普曼。main(AppMain.java:134)

共有1个答案

邹英悟
2023-03-14

错误是您应该将您的包名称添加到Themes.hbm.xml

另一个问题是你的映射不等同于你的getter

<property name="text" column="text" type="string"/>
<property name="orderInfo" column="order_info" type="int"/>

文本不存在,请将其更改为主题。orderInfo getter/setter应该如下所示:

public int getOrderInfo() {
    return orderInfo;
}

public void setOrderInfo(int order_info) {
    this.orderInfo = order_info;
}

比主题课对我更有效。

你也可以用类似的东西。

<hibernate-mapping package="my.package">
<class name="Themes" table="themes">
 ....
 </hibernate-mapping>
 类似资料:
  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。

  • 问题内容: 特定实体存在映射例外。不能弄清楚问题出在哪里。我从头到尾检查了所有映射3次。我仍然收到映射异常。 发送给员工的电子邮件仅映射一次。但它仍然报告错误重复映射 错误是: 电子邮件Pojo email.hbm.xml 相关脚本 发送给员工的电子邮件仅映射一次。但它仍然报告错误重复映射 问题答案: 您是否将Employee中的集合设置为逆?

  • 是否强制将我的外键实体从ClassA映射到ClassB中的主实体?

  • 我认为错误并不在注释中,因为我更改了几次注释,仍然得到了相同的异常。

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 问题内容: 我有一个经典的Hibernate 用。工作正常。但是,数据库中大约有500个不同的值,我需要将它们中的大约30个映射到Java类(子类),将其余的映射到父Java类。 可以将问题建模为对Animal类的示例继承。 因此,我在Java代码中使用定义了大约30个Animal的子类。当Hibernate发现鉴别器的未知值时,它将抛出。但是,我需要将这些未知的标识符值映射到一个实体,最好是An