2015-11-04 88 views
0

我想通過休眠連接到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註釋。我認爲,該映射是正確完成的,但我仍然得到相同的錯誤。感謝您的幫助

+0

請看看https://stackoverflow.com/questions/9954590/hibernate-error-querysyntaxexception-users-is-not-mapped-from-users –

回答

0

錯誤很明顯「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 
+0

我搞砸了。我在同一時間嘗試了兩個項目並複製了錯誤的主類。已編輯主帖子,查詢與Yours類似。 – DisQ

0

也許進入hibernate.cfg.xml中,你映射的是錯誤的班級名稱。

在你的XML:

<mapping class="backend.hibernate.models.UsersModel"/> 

在你的Java類:

public class UsersEntity 

試圖改變你的XML是這樣的:

<mapping class="backend.hibernate.models.UsersEntity"/> 
+0

查詢'「從UsersModel中選擇登錄」'仍然會拋出異常。 –

+0

並將查詢更改爲'「從UsersEntity選擇登錄」'。 我在寫回答時忘了。 –

1

當您使用實體名稱爲

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(); 
+0

我有兩個項目在同一時間打開,並意外複製了錯誤的片段。在適當的一個我有映射類就像你寫和查詢從UsersEntity表中獲取信息。爲失誤抱歉。使用正確的數據編輯第一個帖子 – DisQ

+0

仍在使用 列表 list = session.createQuery(「from UsersEntity」)。list();不是 列表 list = session.createQuery(「from UsersEntity」)。list();所以請檢查一下。 –

0

它可以通過編程方式添加,以及:

Configuration configuration = new Configuration(); 
configuration.configure("hibernate-local-query-test.cfg.xml"); 
configuration.addAnnotatedClass(ClassName.class);