我已經越來越下面玩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()));
但是如果這個項目是由「actirvator start」(開發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) 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:用戶未映射 at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java :171) 在org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) 在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.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 @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; }
這個查詢被稱爲在userDAO的和這個類被稱爲UserController的。像這樣在UserController中注入了事務性註釋「@Transactional public class UserController extends Controller」 –
我使用這個包導入了play.db.jpa.JPA;不是jpaApi和我做這樣的查詢JPA.em()。createQuery(「選擇你從用戶u u.email =:電子郵件和u.secretHash =:secretHash」,User.class) .setParameter(「email」, parameter.getEmail()) .setParameter(「secretHash」,hashAlgorithm.hash(parameter.getPassword()));和其他事情我已經告訴你是嘗試在persistence.xml中添加實體屬性 com.yourCompanyName.WhateverEntityClass –