休眠异常:表未映射
我想通过休眠连接到Postgres,但是我得到异常表未映射。这里是代码:休眠异常:表未映射
的hibernate.cfg.xml
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.connection.password">passwrd</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/dbname</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="connection.pool_size">1</property>
<property name="show_sql">true</property>
<mapping class="backend.hibernate.models.UsersEntity"/>
</session-factory>
UsersEntity:
@Entity
@Table(name = "Users")
@Getter
@Setter
public class UsersEntity {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@Column(name = "login")
private String login;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
}
POM:
<properties>
<hibernate.version>5.0.3.Final</hibernate.version>
<postgresql.version>9.4-1200-jdbc4</postgresql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- The tutorials use the PostgreSQL 9.3.5 database -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
错误:
Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: UsersModel is not mapped [select login from UsersModel]
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:298)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836)
at Fronted.Main.main(Main.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: UsersModel is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:76)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
... 13 more
主:
public class Main {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration
.getProperties());
SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
Session session = sessionFactory.openSession();
session.beginTransaction();
List<UsersModel> list = session.createQuery("from UsersEntity").list();
session.close();
System.out.println(list);
}
}
在我的数据库我有表名为 “用户” 的列像UsersEntity注释。我认为,该映射是正确完成的,但我仍然得到相同的错误。感谢您的帮助
错误很明显“UsersModel未映射”。这意味着您正尝试在查询中使用您尚未完成任何映射的类。
您所查询的UsersModel
有以下几点:
List<UsersModel> list = session.createQuery("select login from UsersModel").list();
但映射到用户表的实体类是UsersEntity
:
@Entity
@Table(name = "Users")
public class UsersEntity
你应该做以下查询:
List<UsersEntity> list = session.createQuery("select login from UsersEntity").list();
// Map from UsersEntity to UsersModel if needed
我搞砸了。我在同一时间尝试了两个项目并复制了错误的主类。已编辑主帖子,查询与Yours类似。 – DisQ
也许进入hibernate.cfg.xml中,你映射的是错误的班级名称。
在你的XML:
<mapping class="backend.hibernate.models.UsersModel"/>
在你的Java类:
public class UsersEntity
试图改变你的XML是这样的:
<mapping class="backend.hibernate.models.UsersEntity"/>
查询'“从UsersModel中选择登录”'仍然会抛出异常。 –
并将查询更改为'“从UsersEntity选择登录”'。 我在写回答时忘了。 –
当您使用实体名称为
UsersEntity
所以请在hibernate.cfg中更改。XML从
<mapping class="backend.hibernate.models.UsersModel"/>
到
<mapping class="backend.hibernate.models.UsersEntity"/>
和变化在主:从
List<UsersModel> list = session.createQuery("select login from UsersModel").list();
到
List<UsersEntity> list = session.createQuery("select login from UsersEntity").list();
我有两个项目在同一时间打开,并意外复制了错误的片段。在适当的一个我有映射类就像你写和查询从UsersEntity表中获取信息。为失误抱歉。使用正确的数据编辑第一个帖子 – DisQ
仍在使用 列表
它可以通过编程方式添加,以及:
Configuration configuration = new Configuration();
configuration.configure("hibernate-local-query-test.cfg.xml");
configuration.addAnnotatedClass(ClassName.class);
请看看https://stackoverflow.com/questions/9954590/hibernate-error-querysyntaxexception-users-is-not-mapped-from-users –