【问题标题】:Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister线程“主”org.hibernate.UnknownEntityTypeException 中的异常:无法找到持久性
【发布时间】:2016-03-11 17:45:50
【问题描述】:

我不得不问,我几乎什么都试过了。

实体类


@Entity
@Table(name="UserInfo")
public class User {

    @Id@Column(name="user_name")
    private String userName;

    @Column(name="user_id")
    private Integer userId;
}

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=BankingApplication</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password">2OmniWay</property>

        <!-- org.hibernate.HibernateException: No CurrentSessionContext configured! -->
        <property name="hibernate.current_session_context_class">thread</property>
         <property name="hibernate.default_schema">dbo</property>
        <!-- Mapping with model class containing annotations -->
        <mapping class="pojo.User"/>
    </session-factory>  
</hibernate-configuration>

SeesionFactory

// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure("hibernate-annotation.cfg.xml");
System.out.println("Hibernate Annotation Configuration loaded");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().                                    applySettings(configuration.getProperties()).build();
 System.out.println("Hibernate Annotation serviceRegistry created");             
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

return sessionFactory;

获取保存在数据库中的对象


SessionFactory sessionFactory = HibernateUtil.getSessionAnnotationFactory();
        Session session = sessionFactory.openSession();
        Account account = null;
        try{
        account = (Account) session.get(Account.class, id);

我收到主题中提到的异常。我只是检查了所有内容的三倍,但它不起作用。

任何建议都会有所帮助。

___________堆栈跟踪_________

 Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister: pojo.User
at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792)
at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2652)
at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2590)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2577)
at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955)
at business.ManageAccount.getAccountDetails(ManageAccount.java:18)
at Utils.TestConnecttion.main(TestConnecttion.java:16)

【问题讨论】:

  • 堆栈跟踪在哪里?

标签: java hibernate annotations hibernate-mapping


【解决方案1】:
//I am using Hib5,I have created SF like this and it is working
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure().build();
            Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build();
            sessionFactory = metadata.getSessionFactoryBuilder().build();
        }
        return sessionFactory;
    }

【讨论】:

    【解决方案2】:

    您的语法在 Hibernate 4.x 中有效,但在 Hibernate 5.x 中会导致错误。

    配置文件会导致此问题。 在配置 XML 文件中,您添加了一个映射文件,例如:

    mapping resource="hibernate.map.xml"
    

    删除它并以编程方式添加它:

    configure.addResource(hibernate.map.xml);
    

    一定会成功的。

    【讨论】:

      【解决方案3】:

      替换你的代码

      "ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();"

      从 SessionFactory 到

      "ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( 配置.getProperties())。 buildServiceRegistry();"

      并尝试使您的 sessionfactory 和 serviceRegistry 在类中静态

      愿它对你有用。

      【讨论】:

      • 你使用的是什么版本的休眠
      【解决方案4】:

      你的用户没有实现 Serializable,试试这个:

       public class User implements Serializable{
         }
      

      【讨论】:

      • 编译时异常。 addAnnotatedClass 是配置对象的方法。
      • 我已经添加了 configuration.addAnnotatedClass(Account.class); configuration.configure("hibernate-annotation.cfg.xml");它有效。但我想知道为什么它不从 cfg.xml 文件中选择映射?
      • 你只在cfg.xml文件中添加了User.java,其他实体呢?
      • 我已经在cfg.xml中添加了所有实体。 Hibernate 没有选择其中任何一个,无论是用户还是帐户。我已尽可能短地显示 cfg.xml。我希望 Hibernate 从 cfg.xml 中选择映射,而不是从上面提供的解决方案中选择。有什么看法?
      • @youshchauhan 如果你能找到答案,你能和我们分享一下,非常感谢
      【解决方案5】:

      您需要在配置中专门添加实体类。 默认情况下,它加载类但不初始化实体类。 对于该 configuration.addAnnotatedClass() 或 addResource 将解决这个问题。

      【讨论】:

      • 通过使用 addAnnotatedClass,它正在工作。但是如果我必须在创建 SessionFactory 时指定每个实体,这不是一个好的设计。我希望这成为配置的一部分。想法??
      • 为此,您需要为每个实体创建 .hbm 并使用 hibernate.cfg.xml 配置该 hbm 文件。我认为这是使其成为配置一部分的唯一方法。
      【解决方案6】:

      您没有将 Dialect 添加到您的 Hibernate 配置文件中。在您的配置文件中添加此行。

      <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
      

      【讨论】:

      • 自动加载。我可以在日志中看到它。其他地方出了点问题。
      • 我也加了但是没有成功。
      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多