2016-07-19 6 views
3

マップされていませんこのコードが呼び出されたとき。休止状態、2.5を再生する:それが発生した(::org.hibernate.hql.internal.ast.QuerySyntaxExceptionユーザーがマップされていない例外がある)</p> <p>表は、私が</p> <p>以下の例外を取得してきた

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

が、このプロジェクトは「actirvator開始」(ENVを開発)によって実行されている場合、この例外は発生しませんでした。

生産環境でのみ、この例外が発生します。

どうすれば修正できますか?

私を助けてください。

1)再生:2.5.4

2)休止状態:あなたの助けと私のプロジェクトの情報について

おかげで

  • システム環境下にある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) 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 (AbstractSharedSessionContract.java): で、org.hibernate.internal.AbstractSharedSessionContract.getAuthority.AbstractSharedSessionContract.getAuthority(AbstractSharedSessionContract.java) :623) ... 52 more 原因:org.hibernate.hql.internal.ast.QuerySyntaxException:ユーザーがマップされていません 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.creat eFromElement(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)ORGでorg.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:574) でorg.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:718) で。 (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もっと

    • 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 
      @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; 
      } 
      

答えて

0

あなたはこのクエリを呼び出すコントローラにする方法について@Transactional注釈を入れましたか?

また、あなたの永続性ファイル

models.User

+0

このクエリはUserDaoクラスで呼び出されると、このクラスはUserControllerでによって呼び出されます。このようなUserControllerのトランザクション注釈 "@Transactional public class UserController extends Controller" –

+0

私はこのパッケージを使用していますimport play.db.jpa.JPA; jpaApiではなく、私はこのJPA.em()のようなクエリを作成します。createQuery( "User uからuを選択してu.email =:emailとu.secretHash =:secretHash"、User.class) .setParameter( "email"パラメータ:getEmail()) .setParameter( "secretHash"、hashAlgorithm.hash(parameter.getPassword()));私が既にあなたに言ったことは、persistence.xmlにエンティティプロパティを追加しようとしたことです。 com.yourCompanyName.WhateverEntityClass

1

ユーザーマッピングがpersistence.xmlで不足しているにこのモデルを追加することができます。ユーザーが定義されているパッケージのスニペットからはわかりませんが、パッケージpersistence.models内にあるとしましょう。 persistence.xmlのは次のようにする必要があります:

<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> 

+0

これは私のために働いてくれてありがとう!私は、hibernate.cfg.xmlではマッピングを持っていましたが、persistence.xmlではマッピングがありませんでした。 persistence.xmlにのみ存在するはずですか? – manyways

+1

私はそれがうれしいです。 persistence.xmlにのみマッピングを配置する必要があります。 – asch

0

それはプレイ2.4で導入されたバグがあったように見えます。回避策としてbuild.sbtに次の行を追加する必要があります。

PlayKeys.externalizeResources := false 

これは、プロードモードでのクラスの読み込み方法に関係するようです。

See here for more info

関連する問題

 関連する問題