我有一个休眠问题,它告诉我实体没有被映射。这是错误:
INFO: HHH000397: Using ASTQueryTranslatorFactory
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: UsersEntity is not mapped [FROM UsersEntity ]
主班
public class Main {
private static final Session session;
static {
try {
HibernateConnection hibernateConnection = new HibernateConnection();
session = hibernateConnection.openSession();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static void main (final String[] args) throws Exception {
try {
List<UsersEntity> usersEntities = (List<UsersEntity>) session.createQuery("FROM UsersEntity ").list();
usersEntities.forEach(usersEntity -> {
System.out.println(usersEntity.getName());
});
} finally {
session.close();
}
}
}
用户实体类
@Entity
@Table(name = "users", schema = "amazonviewer", catalog = "")
public class UsersEntity {
private int id;
private String name;
@Id
@Column(name = "id")
public int getId () {
return id;
}
public void setId (int id) {
this.id = id;
}
@Basic
@Column(name = "name")
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
@Override
public boolean equals (Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UsersEntity that = (UsersEntity) o;
return id == that.id &&
Objects.equals(name, that.name);
}
@Override
public int hashCode () {
return Objects.hash(id, name);
}
}
cfg.xml 文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<mapping class="com.ahernand.entity.MaterialEntity"/>
<mapping class="com.ahernand.entity.MoviesEntity"/>
<mapping class="com.ahernand.entity.UsersEntity"/>
<mapping class="com.ahernand.entity.ViewedEntity"/>
</session-factory>
</hibernate-configuration>
休眠配置类
public class HibernateConnection {
private String DB_DRIVER_NAME = "com.mysql.jdbc.Driver";
private String DB_URL = "jdbc:mysql://localhost:3306/amazonviewer";
private String DB_USERNAME = "root";
private String DB_PASSWORD = "Admin123!";
private String DIALECT = "org.hibernate.dialect.MySQLDialect";
private String SHOW_SQL = "true";
private static Configuration config;
private SessionFactory sessionFactory;
private Session session;
public HibernateConnection () {
config = new Configuration();
config.setProperty("hibernate.connector.driver_class", DB_DRIVER_NAME);
config.setProperty("hibernate.connection.url", DB_URL);
config.setProperty("hibernate.connection.username", DB_USERNAME);
config.setProperty("hibernate.connection.password", DB_PASSWORD);
config.setProperty("hibernate.dialect", DIALECT);
config.setProperty("hibernate.show_sql", SHOW_SQL);
/*
* Config connection pools
*/
config.setProperty("hibernate.c3p0.min_size", "5");
config.setProperty("hibernate.c3p0.max_size", "20");
config.setProperty("hibernate.c3p0.timeout", "300");
config.setProperty("hibernate.c3p0.max_statements", "50");
config.setProperty("hibernate.c3p0.idle_test_period", "3000");
this.sessionFactory = config.buildSessionFactory();
}
public Session openSession() throws HibernateException {
if (session == null) {
this.session = this.sessionFactory.openSession();
}
return this.session;
}
public void reconnect() throws HibernateException {
this.sessionFactory = config.buildSessionFactory();
}
}
这个错误可能是由很多事情引起的,它明确告诉你它没有映射它的类
UsersEntity
,但即使它给你这个错误,也不一定如此。此错误的一些解决方案如下:
在类中声明的 Bean
@Entity
中,尝试放置以下内容:您正在做的是明确告诉它这是您的实体类,这是您在执行
createQuery()
.对于您的
createQuery("from UsersEntity").List()
,您必须始终牢记,调用的是类的名称,它的对象,它的实体以便更清楚,错误的情况是调用数据库表,当您必须使用实体类时。你很重要错误的包,例如:
应该
在您的 CreateQuery 中尝试以下操作
在这种情况下,您所做的是使用对象的完整路径,这当然可以,但这不是最佳实践,您必须确保从其正确的包、配置文件和您的类。
PS:如果解决方案四对你有用,暂时是补丁解决方案,但我建议你不要这样做,你可以尝试告诉我们它是怎么回事,我有一个关于你是否使用其他配置的问题文件,例如 :
persistence.xml
或者.hbm.xml
,如果是,您能否将它们放在问题中,问候。哈斯德鲁巴尔。
请检查导入注解是 javax.persistence 而不是 org.hibernate...
它只是实现了 Serializable 接口,说你的实体可以序列化和非实现。问候。