【问题标题】:Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.mypackage.Address1线程“主”org.hibernate.MappingException 中的异常:未知实体:com.mypackage.Address1
【发布时间】:2016-03-01 09:19:23
【问题描述】:

hibernate.cf.xml 文件

<hibernate-configuration>        
<session-factory>  

 <property name="hbm2ddl.auto">create</property>  
 <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>  
 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>  
 <property name="connection.username">system</property>
 <property name="connection.password">Password</property>  
 <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>  
         
 <mapping class="com.mypackage.UserDetails"/>
 <!-- <mapping class="com.mypackage.Address1"/> -->
   
 </session-factory>        
</hibernate-configuration>  

UserDetails 实体

package com.mypackage;

@Entity
@Table(name="UserDetailsTable")
public class UserDetails {
    @Id
    //@GeneratedValue//(strategy = GenerationType.AUTO)
    private int userId;
    
    private String userName;
    @Embedded
    private Address1 address;
    
    private String phoneNo;
    private Date date;
}

可嵌入实体

package com.mypackage;

@Embeddable
public class Address1 {
    private String street;
    private String city;
    private String state;
    private String pincode;     
}

主类

public class Test {     
    public static void main(String[] args) {        
        Session session=new AnnotationConfiguration().
                configure().buildSessionFactory().openSession();
        
        Transaction t=session.beginTransaction();
        Address1 addrobj1=new Address1();
        addrobj1.setStreet("abcd");
        addrobj1.setCity("efgh");
        addrobj1.setState("abcd");
        addrobj1.setPincode("123456");
        
        UserDetails obj1=new UserDetails();
        obj1.setUserId(1);
        obj1.setUserName("John");
        obj1.setAddress(addrobj1);
        obj1.setPhoneNo("1234567890");
        
        session.saveOrUpdate(addrobj1);         
        t.commit();
        session.close();
        System.out.println("saved successfully");
    }    
}

在 eclipse juno 上的错误是:

log4j:WARN 找不到记录器的附加程序 (org.hibernate.cfg.annotations.Version)。 log4j:WARN 请初始化 log4j 系统正确。线程“主”中的异常 org.hibernate.MappingException:未知实体:com.mypackage.Address1 在 org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:548) 在 org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338) 在 org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180) 在 org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:487) 在 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:84) 在 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) 在 org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507) 在 org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499) 在 org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495) 在 com.mypackage.Test.main(Test.java:33)

无法解决错误。
有人帮忙吗??

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    你已经评论了映射类地址1&lt;!-- &lt;mapping class="com.mypackage.Address1"/&gt; --&gt;所以找不到

    【讨论】:

      【解决方案2】:

      请将 Address1 bean 的映射标签添加到您的休眠配置文件中,如果您尚未为 Address1 bean 创建映射文件,请创建它。

      <?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="Address1" table="ADDRESS1">
            <meta attribute="class-description">
               This class contains the address detail. 
            </meta>
            <id name="id" type="int" column="id">
               <generator class="native"/>
            </id>
            <property name="street" column="street_name" type="string"/>
            <property name="city" column="city_name" type="string"/>
            <property name="state" column="state_name" type="string"/>
            <property name="zipcode" column="zipcode" type="string"/>
         </class>
      </hibernate-mapping>
      

      你也可以使用下面的标签在你的配置文件中添加实体映射

        <mapping resource>com/mypackage/Address1.hbm.xml</mapping resource>
      

      或者您必须使用

      将类显式添加到配置中
      configuration.addClass(com.mypackage.Address1.class)
      // Read mappings as a application resourceName
       // addResource is for add hbml.xml files in case of declarative approach
      configuration.addResource("com.mypackage.Address1.xml")
      

      【讨论】:

        猜你喜欢
        • 2016-01-16
        • 1970-01-01
        • 2016-06-09
        • 2017-06-03
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        • 2014-09-01
        相关资源
        最近更新 更多