2016-07-19 3 views
3

я получаю исключение нижеиграть 2.5, спящий режим: таблица не отображается

(Исключение: org.hibernate.hql.internal.ast.QuerySyntaxException: Пользователь не отображается)

это происходило когда этот код вызывается.

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

но если этот проект запущен с помощью «запуска активатора» (разработка env), это исключение не произошло.

это означает ... только на производственной среде, я получил это исключение.

как я могу это исправить.

, пожалуйста, помогите мне.

спасибо за вашу помощь и моей проектной информации ниже

  • системы окружающей среды:

1) Play: 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) на org.hibernate.QueryException.wrapWithQueryString (QueryException.java:103) в 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) на org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan (AbstractSharedSessionContract.java:521) в org.hibernate.internal.AbstractSharedSessionContract.createQuery (AbstractSharedSessionContract.java : 623) ... 52 еще Вызвано: org.hibernate.hql.internal.ast.QuerySyntaxException: Пользователь не отображается на 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) на org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement (HqlSqlBaseWalker.java:3690) на org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList (HqlSqlBaseWalker.java: 3579) на org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause (HqlSqlBaseWalker.java:718) в org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query (HqlSqlBaseWalker.java:574) в орг. hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement (HqlSqlBaseWalker.Java: 311) на org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement (HqlSqlBaseWalker.java:259) на org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze (QueryTranslatorImpl.java:262) на 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 Код класса

    @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 («выберите u из User u, где u.email =: email и u.secretHash =: secretHash», User.class) .setParameter («email», parameter.getEmail()) .setParameter ("secretHash", hashAlgorithm.hash (параметр.getPassword())); и другое, что я уже сказал вам, - попробовать добавить свойство entity в 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

Похоже, там была ошибка введена в Play 2.4. Вам необходимо добавить следующую строку в файл build.sbt в качестве обходного пути.

PlayKeys.externalizeResources := false 

Похоже, что это связано с тем, как классы загружаются в режиме prod.

See here for more info

Смежные вопросы