gpt4 book ai didi

java - 未知实体类型异常 : Unable to locate persister (Hibernate 5. 0)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:36 25 4
gpt4 key购买 nike

在下面的代码中,当我尝试执行 Main.java 时我遇到异常:

Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister: com.np.vta.test.pojo.Users
at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792)
at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2637)
at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2575)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2562)
at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955)
at com.app.test.Main.main(Main.java:20)

但如果我取消注释 cfg.addClass( Users.class ).addResource( "com/np/vta/test/pojo/Users.hbm.xml" );那么代码就可以正常工作了。

为什么它不读取 <mapping>来自 hibernate.cfg.xml


项目设置

project setup eclipse


hibernate .cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">root@123321</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.1.90:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/np/vta/test/pojo/Users.hbm.xml" class="com.np.vta.test.pojo.Users" />
</session-factory>
</hibernate-configuration>

用户.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 24 Aug, 2015 3:57:45 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.np.vta.test.pojo.Users" table="tomcat_users">
<id name="userName" type="java.lang.String">
<column name="user_name" />
<generator class="assigned" />
</id>
<property name="password" type="java.lang.String">
<column name="password" />
</property>
</class>
</hibernate-mapping>

用户.java

package com.np.vta.test.pojo;

import java.io.Serializable;

public class Users implements Serializable
{
private static final long serialVersionUID = 7855937172997134350L;
private String userName;
private String password;

public Users()
{
}
// getter and setters
}

主程序.java

package com.app.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

import com.np.vta.test.pojo.Users;

public class Main
{
public static void main( String[] args )
{
Configuration cfg = new Configuration();
cfg.configure( "hibernate.cfg.xml" );
// cfg.addClass( Users.class ).addResource( "com/np/vta/test/pojo/Users.hbm.xml" );
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder().applySettings( cfg.getProperties() );
SessionFactory sessionFactory = cfg.buildSessionFactory( registryBuilder.build() );
Session session = sessionFactory.openSession();
Users users = session.get( Users.class, "anand" );
System.out.println( users );
}
}

最佳答案

不要将 Configuration 与 StandardServiceRegistryBuilder 一起使用,Configuration 被认为已弃用,而是按照 hibernate 5 文档中所述进行引导,我遇到了同样的问题并且已解决。

StandardServiceRegistry standardRegistry = new     StandardServiceRegistryBuilder()
.configure( "org/hibernate/example/MyCfg.xml" )
.build();

Metadata metadata = new MetadataSources( standardRegistry )
.addAnnotatedClass( MyEntity.class )
.addAnnotatedClassName( "org.hibernate.example.Customer" )
.addResource( "org/hibernate/example/Order.hbm.xml" )
.addResource( "org/hibernate/example/Product.orm.xml" )
.getMetadataBuilder()
.applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE )
.build();

SessionFactory sessionFactory = metadata.getSessionFactoryBuilder()
.applyBeanManager( getBeanManagerFromSomewhere() )
.build();

有关详细信息,请查看 documentation

关于java - 未知实体类型异常 : Unable to locate persister (Hibernate 5. 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32197562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com