javax.persistence.PersistenceException : org. hibernate.exception.SQLGrammarException: 无法执行查询

标签 java postgresql hibernate jpa

我有课

@SuppressWarnings("JpaQlInspection")   
@Entity   
@Table(name = "tickets", indexes = {  
    @Index(name = "cancelation_Date", columnList = "cancelation_Date"),  
    @Index(name = "pos_id", columnList = "pos_id"),  
    @Index(name = "flag", columnList = "flag")  
})  
@SqlResultSetMapping(  
    name = "TicketMapping",  
    entities = @EntityResult(  
        entityClass = Ticket.class,  
        fields = {  
            @FieldResult(name = "id", column = "id"),  
            @FieldResult(name = "version", column = "version"),  
            @FieldResult(name = "pos_id", column = "pos_id"),  
            @FieldResult(name = "cancelation_date", column = "cancelation_date"),
            @FieldResult(name = "cost", column = "cost"),  
            @FieldResult(name = "flag", column = "flag"),  
        }  
    )  
)  

public class Ticket extends BaseEntity {

    @Column(name = "pos_id", length = 12)
    private String posId;

    @Column(name = "cost", length = 10)
    private String cost;

    @Column(name = "cancelation_date")
    private String cancelationDate;

    @Column(name = "flag", length = 10)
    private String flag;

    public String getPosId() {
        return posId;
    }

    public void setPosId(String posId) {
        this.posId = posId;
    }

    public String getCost() {
        return cost;
    }

    public void setCost(String cost) {
        this.cost = cost;
    }

    public String getCancelationDate() {
        return cancelationDate;
    }

    public void setCancelationDate(String cancelationDate) {
        this.cancelationDate = cancelationDate;
    }

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }
}

@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "generator")
    @TableGenerator(name = "generator", table = "sequence_list", pkColumnName = "name", allocationSize = 50, initialValue = 3000)
    @Column(name = "id")
    protected Long id;

    @Version
    private Long version;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public boolean isNew() {
        return (this.id == null);
    }
}

我正在使用 postgres 9.6。我在以下情况下遇到错误:

Query query = this.entityManager.createNativeQuery(searchQuery,"TicketMapping");

return query.getResultList();

错误日志:

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1419) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.query.Query.getResultList(Query.java:146) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:372) ~[spring-orm-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at com.sun.proxy.$Proxy39.getResultList(Unknown Source) ~[na:na]
    at vn.com.bgt.lottery.dao.jpa.JpaTicketDao.search(JpaTicketDao.java:29) ~[classes/:na]
    at vn.com.bgt.lottery.TicketSearchUtil.search(TicketSearchUtil.java:89) ~[classes/:na]
    at vn.com.bgt.lottery.Console.exportTickets(Console.java:72) [classes/:na]
    at vn.com.bgt.lottery.Console.main(Console.java:59) [classes/:na]
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2618) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2598) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2430) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2425) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2153) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:991) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:147) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1410) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    ... 11 common frames omitted
Caused by: org.postgresql.util.PSQLException: The column name id was not found in this ResultSet.
    at org.postgresql.jdbc.PgResultSet.findColumn(PgResultSet.java:2608) ~[postgresql-42.0.0.jre6.jar:42.0.0.jre6]
    at org.postgresql.jdbc.PgResultSet.getLong(PgResultSet.java:2505) ~[postgresql-42.0.0.jre6.jar:42.0.0.jre6]
    at com.mchange.v2.c3p0.impl.NewProxyResultSet.getLong(NewProxyResultSet.java:2625) ~[c3p0-0.9.1.2.jar:0.9.1.2]
    at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:63) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:260) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:256) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:246) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:332) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:802) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.processResultSet(Loader.java:985) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:943) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2615) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final]
    ... 19 common frames omitted

最佳答案

您的查询语法不正确:

Query query = this.entityManager.createNativeQuery(searchQuery, "TicketMapping");
//--------------------------------------------------------------------^^
//This should be the ObjectName.class

所以你的查询应该是这样的:

Query query = this.entityManager.createNativeQuery("YourQuery", ObjectName.class);

或者只是:

Query query = this.entityManager.createNativeQuery("YourQuery");
List<ObjectName> list = query.getResultList();
return list;

关于javax.persistence.PersistenceException : org. hibernate.exception.SQLGrammarException: 无法执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710662/

相关文章:

java - 从命令行传递参数编译java程序

java - 如何在服务 HTTP 请求并发送回客户端后启动后台线程?

PostgreSQL 喜欢不返回匹配的实例

sql - 将一个表中缺失的记录复制到新表中

database - 为什么\dt *.向我展示 psql 中的关系列表,但\dt 不向我展示我的 postgreSQL 数据库中的表列表?

java - 使用 eureka 的 Spring Cloud 网关自动路由

java - 每个请求在 VertX 中设置单独的超时

java - 是否可以通过 jboss-deployment-struction.xml 配置 JPA 2.1,为 Spring 4 和 Hibernate 4.3.10 配置 JBoss EAP 6.4.x?

使用 Hibernate 标准查询的 Java 类转换异常

java - Hibernate @OneToOne 不映射 id