Play 2.5, Hibernate: таблица не отображается

hibernate playframework

758 просмотра

3 ответа

30 Репутация автора

Я получаю исключение ниже

(Исключение: 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()));

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

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

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

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

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

  • Системная среда:

1) Играть: 2.5.4

2) гибернация: 5.2.1 финал

  • Сообщение об исключении:

    Вызывается: org.hibernate.hql.internal.ast.QuerySyntaxException: пользователь не отображается [выберите пользователя из пользователя u, где u.email =: электронная почта и u.secretHash =: secretHash] в org.hibernate.hql.internal.ast .QuerySyntaxException.generateQueryException (QuerySyntaxException.java:79) в org.hibernate.QueryException.wrapWithQueryString (QueryException.java:103) в org.hibernate.hql.internal.ast.QueryTranslatorImpl .ljl1. hibernate.hql.internal.ast.QueryTranslatorImpl.compile (QueryTranslatorImpl.java:142) в org.hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan.java:115) в org.hibernate.eniPQuery . (HQLQueryPlan.java:77) в 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.Exception org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister (SessionFactoryHelper.java:171) в org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement (FromElementhact.in). hql.internal.ast.tree.FromClause.addFromElement (FromClause.java:79) в org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement (HqlSqlWalker.java:321) в org.lternal. HqlSqlBaseWalker.fromElement (HqlSqlBaseWalker.java:3690) в org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList (HqlSqlBaseWalker.java:3579. .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) ... еще 58selectStatement (HqlSqlBaseWalker.java:311) в org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement (HqlSqlBaseWalker.java:259) в org.hibernate.hql.internal.astalyljl.jmp.tmp в org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:190) ... еще 58selectStatement (HqlSqlBaseWalker.java:311) в org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement (HqlSqlBaseWalker.java:259) в org.hibernate.hql.internal.astalyljl.jmp.tmp в 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;
    }
    
Автор: JungGyu Kim Источник Размещён: 19.07.2016 07:30

Ответы (3)


0 плюса

96 Репутация автора

Вы поместили аннотацию @Transactional в метод контроллера, где вы вызываете этот запрос?

Вы также можете добавить эту модель в свой файл персистентности.

models.User

Автор: Mario Petrovic Размещён: 19.07.2016 06:38

1 плюс

1655 Репутация автора

Отображение пользователя отсутствует в файле 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>

Автор: asch Размещён: 20.07.2016 06:08

0 плюса

633 Репутация автора

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

PlayKeys.externalizeResources := false

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

Смотрите здесь для получения дополнительной информации

Автор: uesports135 Размещён: 12.11.2016 07:15
Вопросы из категории :
32x32