hutiefang 2014-04-25 08:22 采纳率: 0%
浏览 1543

hiberante4.3.5 session.get()报错

Exception in thread "main" org.hibernate.MappingException: Unknown entity: ProdTaMasterEntity
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2565)
at org.hibernate.internal.SessionImpl.access$1900(SessionImpl.java:176)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.(SessionImpl.java:2504)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.(SessionImpl.java:2495)
at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1038)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:960)
at frank.hu.webHibernate.dao.TaMasterDao.getById(TaMasterDao.java:39)
at frank.hu.webHibernate.dao.TaMasterDao.main(TaMasterDao.java:45)

问题在于我的list方法正常执行无任何错误get就不行 什么原因
方法如下。

  public List<ProdTaMasterEntity> list(){
      Session session=  sessionFactory.openSession();
      logger.info("openSession");
      logger.debug("openSession");
      logger.warn("wwwwwwww");
      logger.error("eeeeeeeeee");
      Query query=  session.createQuery("from ProdTaMasterEntity" );

      List<ProdTaMasterEntity> list=      query.list();
      session.close();
      logger.debug("close Session");
     // sessionFactory.close();
      return list;

  }

  public ProdTaMasterEntity getById(String id){
      Session session=  sessionFactory.openSession();
      ProdTaMasterEntity ta=      (ProdTaMasterEntity) session.get("ProdTaMasterEntity", id);
    //  session.close();
      return ta;
  }
  public static void main(String[] args) {
      TaMasterDao tmd=new TaMasterDao();
      tmd.getById("1205020129");
}

我是使用的注解
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import java.util.Date;

/**

  • ProdTaMaster generated by hbm2java
    */
    @Entity
    @Table(name = "PROD_TA_MASTER")
    public class ProdTaMasterEntity implements java.io.Serializable {

    // Fields

    /**

    • */ private static final long serialVersionUID = -8968765405025406974L; @Id @Column @GeneratedValue( strategy=GenerationType.AUTO
      ) private String tmTaNo;

其他只有getset方法

如果改为 (ProdTaMasterEntity) session.get(ProdTaMasterEntity.class, id);又正确了。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 00:14
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    从你的描述来看,你可能遇到了Hibernate的Session异常。在Hibernate中,getSession()方法返回的是一个SessionFactory对象,这个对象可以创建、打开和关闭事务。如果你尝试获取某个特定类型的实体(例如ProdTaMasterEntity),你需要确保你在使用SessionFactory时传入的是正确的类型。

    在Hibernate中,你可以通过设置SessionFactory的sessionFactory属性来指定要使用的SessionFactory对象:

    SessionFactory factory = new Configuration().configure()
            .addAnnotatedClass(ProdTaMasterEntity.class)
            .buildSessionFactory();
    
    Session session = factory.getCurrentSession();
    

    然后,你可以像这样调用session对象的方法来操作数据库中的数据:

    Query query = session.createQuery("FROM ProdTaMasterEntity WHERE id=:id");
    query.setParameter("id", 123);
    List results = query.getResultList();
    

    在你的例子中,你似乎是在尝试获取ProdTaMasterEntity的实例,并且没有提供正确的SessionFactory。这可能是导致问题的原因之一。

    此外,我注意到你的类中有几个字段都是private的,而Hibernate需要这些字段来初始化会话。这可能会导致一些问题。你应该将它们标记为protected或public以便于Spring管理。例如:

    @PersistenceContext
    private EntityManager entityManager;
    

    另外,请检查你的ORM配置是否正确。在Hibernate中,你可以通过以下方式获取当前的会话:

    Session currentSession = HibernateUtil.getSessionFactory().getCurrentSession();
    

    最后,如果你正在使用Spring框架进行开发,确保Spring容器已经启动并且有正确的SessionFactory注入到应用程序中。

    评论

报告相同问题?