玩2.5,hibernate:table没有映射 [英] play 2.5, hibernate : table is not mapped

查看:81
本文介绍了玩2.5,hibernate:table没有映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在

以外发生异常(例外情况是:org.hibernate.hql.internal.ast.QuerySyntaxException:用户未被映射)



调用此代码时发生。

  TypedQuery< User> query = jpaApi.em()。createQuery(从用户u中选择u,其中u.email =:email和u.secretHash =:secretHash,User.class)
.setParameter(email,parameter.getEmail ())
.setParameter(secretHash,hashAlgorithm.hash(parameter.getPassword()));

但是如果这个项目是由actirvator start(开发env)运行的,这个异常没有发生。



它的意思是......只有在生产环境中,我得到了这个异常。



我该如何解决它。



请帮助我。



感谢您的帮助,我的项目信息在




  • 系统环境:

    $ b <1> Play:2.5.4



    2)hibernate:5.2.1.final


    • 异常消息:



      引起者:org.hibernate.hql.internal.ast.QuerySyntaxException:用户未映射[从用户u中选择u u.email =:email和u .secretHash =:secretHash]
      at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
      at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)在org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)

      在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
      在org.hibernate.engine.query.spi.HQLQueryPlan。(HQLQueryPlan.java:115)
      在org.hibernate.engin e.query.spi.HQLQueryPlan。(HQLQueryPlan.java:77)
      at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:152)
      org.hibernate.internal组织:在org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:623)
      .AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:521)
      ... 52个
      所致。 hibernate.hql.internal.ast.QuerySyntaxException:用户未映射
      在org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171)
      在org.hibernate。 hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
      at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:79)
      at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321)
      在org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWa lker.java:3690)美元,org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3579 B $ B)
      在org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause( HqlSqlBaseWalker.java:718)美元,org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:574 b $ b)
      在org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement( HqlSqlBaseWalker.java:311)美元,org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259 b $ b)
      在org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze( QueryTranslatorImpl.java:262)
      在org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
      ... 58 more


    • persistence.xml

       < persistence xmlns =http://java.sun.com / xml / ns / persistence
      xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
      xsi:schemaLocation =http://java.sun.com / xml / ns /持久性http ://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
      version =2.0>
      < persistence-unit name =Hoth-PersistenceUnittransaction-type =RESOURCE_LOCAL>
      < provider> org.hibernate.jpa.HibernatePersistenceProvider< / provider>
      <非-jta-data-source> DefaultDS< /非-jta-data-source>
      <属性>
      < property name =hibernate.dialectvalue =org.hibernate.dialect.PostgreSQL94Dialect/>

      < property name =hibernate.show_sqlvalue =true/>
      < property name =hibernate.format_sqlvalue =true/>
      < property name =hibernate.use_sql_commentsvalue =true/>

      < property name =hibernate.max_fetch_depthvalue =5/>

      < property name =hibernate.hbm2ddl.autovalue =update/>

      < property name =hibernate.jdbc.batch_sizevalue =50/>
      < property name =hibernate.jdbc.batch_versioned_datavalue =true/>
      < property name =hibernate.order_insertsvalue =true/>
      < / properties>
      < / persistence-unit>


    • 实体类代码

        @Entity 
      @Table(name =users)
      @Getter @Setter @ToString @ EqualsAndHashCode(of =email)
      public class User {
      @Id
      private String email;

      @Column(name =secret_hash)
      private String secretHash;

      @Column(name =accessible_at)
      private LocalDateTime accessibleAt;

      私人字符串性别;

      @Column(name =birth_year)
      private Integer birthYear;

      @Column(name =picture_name)
      private String pictureName;

      @Column(name =picture_url)
      private String pictureUrl;

      私人字符串昵称;



    解决方案

    Persistence.xml中缺少用户映射。我无法从片段中看到用户定义的包,但假设它位于包persistence.models中。 persistence.xml应该是这样的:

     < persistence-unit name =Hoth-PersistenceUnittransaction-type = RESOURCE_LOCAL> 
    < provider> org.hibernate.jpa.HibernatePersistenceProvider< / provider>
    <非-jta-data-source> DefaultDS< /非-jta-data-source>
    < class> persistence.models.User< / class>
    <属性>
    ...
    < / properties>


    I have been getting a exception below

    (Exception is : org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped )

    It occured when this code is called.

    TypedQuery<User> query = jpaApi.em().createQuery("select u from User u where u.email = :email and u.secretHash = :secretHash", User.class)
                .setParameter("email", parameter.getEmail())
                .setParameter("secretHash", hashAlgorithm.hash(parameter.getPassword()));
    

    but if this project is running by "actirvator start" (develop env), this exception did not occur.

    it mean ... only on Production environment i got this exception.

    how can i fix it.

    please help me.

    thanks for your help and my project information is below

    • System environment :

    1) Play : 2.5.4

    2) hibernate : 5.2.1.final

    • Exception Message :

      Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select u from User u where u.email = :email and u.secretHash = :secretHash] 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.(HQLQueryPlan.java:115) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:77) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:152) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:521) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:623) ... 52 more Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: User 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:79) at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3690) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3579) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:718) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:574) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) ... 58 more

    • persistence.xml

      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
      version="2.0">
      <persistence-unit name="Hoth-PersistenceUnit" transaction-type="RESOURCE_LOCAL">
          <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
          <non-jta-data-source>DefaultDS</non-jta-data-source>
          <properties>
              <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" />
      
              <property name="hibernate.show_sql" value="true" />
              <property name="hibernate.format_sql" value="true" />
              <property name="hibernate.use_sql_comments" value="true" />
      
              <property name="hibernate.max_fetch_depth" value="5" />
      
              <property name="hibernate.hbm2ddl.auto" value="update" />
      
              <property name="hibernate.jdbc.batch_size" value="50" />
              <property name="hibernate.jdbc.batch_versioned_data" value="true" />
              <property name="hibernate.order_inserts" value="true" />
          </properties>
      </persistence-unit>
      

    • Entity Class Code

      @Entity
      @Table (name = "users")
      @Getter @Setter @ToString @EqualsAndHashCode (of = "email")
      public class User {
      @Id
      private String email;
      
      @Column(name = "secret_hash")
      private String secretHash;
      
      @Column(name = "accessed_at")
      private LocalDateTime accessedAt;
      
      private String gender;
      
      @Column(name = "birth_year")
      private Integer birthYear;
      
      @Column(name = "picture_name")
      private String pictureName;
      
      @Column(name = "picture_url")
      private String pictureUrl;
      
      private String nickname;
      }
      

    解决方案

    The User mapping is missing in the persistence.xml. I cannot see from the snippets in what package the User is defined, but let's suppose it is in the package persistence.models. The persistence.xml should be like this:

    <persistence-unit name="Hoth-PersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <non-jta-data-source>DefaultDS</non-jta-data-source>
    <class>persistence.models.User</class>
    <properties>
        ...
    </properties>
    

    这篇关于玩2.5,hibernate:table没有映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆