org.hibernate.MappingException:未知实体: [英] org.hibernate.MappingException: Unknown entity:

查看:193
本文介绍了org.hibernate.MappingException:未知实体:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我有一个独立的应用程序,它使用spring和Hibernate作为JPA,我试图运行测试使用一个主要类



我的主类

  package edu .acct.tsegay.common; 

导入edu.acct.tsegay.model.User;
import edu.acct.tsegay.business.IUserBusinessObject;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
public static void main(String [] args){
try {
ApplicationContext context = new ClassPathXmlApplicationContext(
Spring3AndHibernate- servlet.xml文件);
IUserBusinessObject userBusinessObject =(IUserBusinessObject)上下文
.getBean(userBusiness);

User user =(User)context.getBean(user1);
user.setPassword(pass);
user.setUsername(tsegay);
System.out.println(user.getPassword());

userBusinessObject.delete(user);

User user2 = new User();
user2.setUsername(habest);
user2.setPassword(pass1);
System.out.println(user2.getPassword());
/ *
* userBusinessObject.save(user2);
*
* User user3 = userBusinessObject.searchUserbyId(tsegay);
* System.out.println(Search Result:+ user3.getUsername());
* /
System.out.println(Success);
} catch(Exception e){
e.printStackTrace();
}

}

}

我的应用程序上下文是:

 < beans xmlns =http://www.springframework.org/schema/beans 

xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance

xsi:schemaLocation =http://www.springframework .org / schema / beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\">

<! - 数据源 - >
< bean id =dataSource
class =org.springframework.jdbc.datasource.DriverManagerDataSource>
< property name =driverClassNamevalue =com.mysql.jdbc.Driver/>
< property name =urlvalue =jdbc:mysql:// localhost:3306 / test/>
< property name =usernamevalue =test/>
< property name =passwordvalue =password/>
< / bean>

<! - 会话工厂 - >
< bean id =sessionFactory
class =org.springframework.orm.hibernate3.LocalSessionFactoryBean>

< property name =dataSource>
< ref bean =dataSource/>

< / property>

< property name =hibernateProperties>

<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< /道具>
< / property>



< / bean>

<! - - 公开对象业务对象 - >
< bean id =userBusinessclass =edu.acct.tsegay.business.UserBusinessObject>
< property name =userDaoref =userDao/>

< / bean>
< bean id =user1class =edu.acct.tsegay.model.User>
< property name =usernamevalue =tse/>
< property name =passwordvalue =pass/>
< / bean>


<! - 数据访问对象 - >
< bean id =userDaoclass =edu.acct.tsegay.dao.UserDao>
< property name =sessionFactoryref =sessionFactory/>
< / bean>


< / beans>

我的用户模型是:

  package edu.acct.tsegay.model; 

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;

import org.hibernate.annotations.NaturalId;

@Entity
public class User实现Serializable {
/ **
*
* /
private static final long serialVersionUID = 1L;
私人字符串用户名;
私人字符串密码;
私人整数版本;

@版本
public Integer getVERSION(){
return VERSION;
}

public void setVERSION(Integer vERSION){
VERSION = vERSION;
}
@NaturalId
public String getUsername(){
return username;
}


public void setUsername(String username){
this.username = username;
}

public String getPassword(){
return password;
}

public void setPassword(String password){
this.password = password;
}

}

我的DAO是:

  package edu.acct.tsegay.dao; 

导入edu.acct.tsegay.model.User;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Repository;

@Repository
public class UserDao实现IUserDao {
private SessionFactory sessionFactory;

私有HibernateTemplate hibernateTemplate;

public SessionFactory getSessionFactory(){
return sessionFactory;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
this.hibernateTemplate = new HibernateTemplate(sessionFactory);

$ b $ public void save(User user){
// TODO自动生成的方法存根
// getHibernateTemplate()。save(user);
this.hibernateTemplate.save(user);
}

public void delete(用户用户){
// TODO自动生成的方法存根
this.hibernateTemplate.delete(user);

$ b $ public User UserUserbyId(String username){
// TODO自动生成的方法存根
返回this.hibernateTemplate.get(User.class,username) ;
}

}

这是我的stacktrace错误,当我运行程序:

  pass 
org.springframework.orm.hibernate3.HibernateSystemException:Unknown entity:edu.acct。 tsegay.model.User;嵌套异常是org.hibernate.MappingException:未知实体:edu.acct.tsegay.model.User
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
at org .springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm .hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:837)
at org.springframework.orm.hibernate3.HibernateTemplate .delete(HibernateTemplate.java:833)
at edu.acct.tsegay.dao.UserDao.delete(UserDao.java:34)
at edu.acct.tsegay.business.UserBusinessObject.delete(UserBusinessObject .java:30)
at edu.acct.tsegay.common.App.main(App.java:23)
引起:或g.hibernate.MappingException:未知实体:edu.acct.tsegay.model.User
位于org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:580)
位于org.hibernate.impl。 SessionImpl.getEntityPersister(SessionImpl.java:1365)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:100)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:793)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:771)$ b(org.hibernate.impl.SessionImpl.delete) $ b at org.springframework.orm.hibernate3.HibernateTemplate $ 25.doInHibernate(HibernateTemplate.java:843)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
。 .. 6 more


解决方案

你的会话工厂配置。如果您使用的是 EntityManager ,您可以自动发现您的实体。



为了在hibernate中使用注释和Spring必须使用 AnnotationSessionFactoryBean

 < bean id = sessionFactory
class =org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
< property name =annotatedClasses>
< list>
< value> edu.acct.tsegay.model.User< / value>
< / list>
< / property>
....
< / bean>

另外,你的 User 实体是一个春天的豆子。你不需要那个。 Hibernate实体应该使用 new 运算符创建。

I really want to understand what is going on with my code.

I have a standalone application which uses spring and Hibernate as JPA and I am trying to run the test using a single main Class

My main class

package edu.acct.tsegay.common;

import edu.acct.tsegay.model.User;
import edu.acct.tsegay.business.IUserBusinessObject;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        try {
            ApplicationContext context = new ClassPathXmlApplicationContext(
                    "Spring3AndHibernate-servlet.xml");
            IUserBusinessObject userBusinessObject = (IUserBusinessObject) context
                    .getBean("userBusiness");

            User user = (User) context.getBean("user1");
            user.setPassword("pass");
            user.setUsername("tsegay");
            System.out.println(user.getPassword());

            userBusinessObject.delete(user);

            User user2 = new User();
            user2.setUsername("habest");
            user2.setPassword("pass1");
            System.out.println(user2.getPassword());
            /*
             * userBusinessObject.save(user2);
             * 
             * User user3 = userBusinessObject.searchUserbyId("tsegay");
             * System.out.println("Search Result: " + user3.getUsername());
             */
            System.out.println("Success");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

my application context is:

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <!-- data source -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="test" />
        <property name="password" value="password" />
    </bean>

    <!-- session factory -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource">
            <ref bean="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>



    </bean>

    <!-- exposed person business object -->
    <bean id="userBusiness" class="edu.acct.tsegay.business.UserBusinessObject">
        <property name="userDao" ref="userDao" />

    </bean>
    <bean id="user1" class="edu.acct.tsegay.model.User">
        <property name="username" value="tse" />
        <property name="password" value="pass" />
    </bean>


    <!-- Data Access Object -->
    <bean id="userDao" class="edu.acct.tsegay.dao.UserDao">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>


</beans>

My User Model is:

package edu.acct.tsegay.model;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;

import org.hibernate.annotations.NaturalId;

@Entity
public class User implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String username;
    private String password;
    private Integer VERSION;

    @Version
    public Integer getVERSION() {
        return VERSION;
    }

    public void setVERSION(Integer vERSION) {
        VERSION = vERSION;
    }
    @NaturalId
    public String getUsername() {
        return username;
    }


    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

My DAO is:

package edu.acct.tsegay.dao;

import edu.acct.tsegay.model.User;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Repository;

@Repository
public class UserDao implements IUserDao {
    private SessionFactory sessionFactory;

    private HibernateTemplate hibernateTemplate;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }

    public void save(User user) {
        // TODO Auto-generated method stub
        // getHibernateTemplate().save(user);
        this.hibernateTemplate.save(user);
    }

    public void delete(User user) {
        // TODO Auto-generated method stub
        this.hibernateTemplate.delete(user);
    }

    public User searchUserbyId(String username) {
        // TODO Auto-generated method stub
        return this.hibernateTemplate.get(User.class, username);
    }

}

And this my stacktrace error when i run the program:

pass
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: edu.acct.tsegay.model.User; nested exception is org.hibernate.MappingException: Unknown entity: edu.acct.tsegay.model.User
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
    at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:837)
    at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:833)
    at edu.acct.tsegay.dao.UserDao.delete(UserDao.java:34)
    at edu.acct.tsegay.business.UserBusinessObject.delete(UserBusinessObject.java:30)
    at edu.acct.tsegay.common.App.main(App.java:23)
Caused by: org.hibernate.MappingException: Unknown entity: edu.acct.tsegay.model.User
    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:580)
    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1365)
    at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:100)
    at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74)
    at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:793)
    at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:771)
    at org.springframework.orm.hibernate3.HibernateTemplate$25.doInHibernate(HibernateTemplate.java:843)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
    ... 6 more

解决方案

You have to list your classes in your session factory configuration. You can have your entities auto-discovered if you are using EntityManager.

In order to use annotations with hibernate and spring, you have to use AnnotationSessionFactoryBean:

 <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="annotatedClasses">
        <list>
            <value>edu.acct.tsegay.model.User</value>
        </list>
    </property>
    ....
 </bean>

Also, it is rather strange that your User entity is a spring bean. You don't need that. Hibernate entities are supposed to be created with the new operator.

这篇关于org.hibernate.MappingException:未知实体:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆