最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL - Stack Overflow

programmeradmin5浏览0评论

Seeing this issue after upgrading springboot to 3.4.3 (automatic upgrade of hibernate ORM 6.6.8-Final). There was no issue with springboot 3.2.3 (hibernate ORM 6.4.4-Final)

.hibernate.exception.SQLGrammarException: JDBC exception executing SQL ERROR: column jlargco1_0.ab_cst_office_id does not exist
  Hint: Perhaps you meant to reference the column "jlargco1_0.abcstofficeid".
  Position: 1495] [n/a]
    at .hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:91) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:268) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:171) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.<init>(JdbcValuesResultSetImpl.java:74) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.resolveJdbcValuesSource(JdbcSelectExecutorStandardImpl.java:355) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:137) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:102) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.spi.JdbcSelectExecutor.executeQuery(JdbcSelectExecutor.java:91) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:165) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:145) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:117) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:74) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3895) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3884) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:590) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:560) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:544) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.loadWithRegularProxy(DefaultLoadEventListener.java:289) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:241) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:110) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:69) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1229) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1217) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:210) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.doLoad(IdentifierLoadAccessImpl.java:161) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.lambda$load$1(IdentifierLoadAccessImpl.java:150) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.perform(IdentifierLoadAccessImpl.java:113) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:150) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.find(SessionImpl.java:2459) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.find(SessionImpl.java:2430) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    at .springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) ~[spring-orm-6.2.3.jar:6.2.3]
    at jdk.proxy4/jdk.proxy4.$Proxy153.find(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    at .springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) ~[spring-orm-6.2.3.jar:6.2.3]
    at jdk.proxy4/jdk.proxy4.$Proxy153.find(Unknown Source) ~[na:na]
    at .springframework.data.jpa.repository.support.SimpleJpaRepository.findById(SimpleJpaRepository.java:325) ~[spring-data-jpa-3.4.3.jar:3.4.3]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]

Entity table as follows:

import lombok.Getter;
import lombok.Setter;

import jakarta.persistence.*;
import java.sql.Timestamp;

@Entity
@Getter
@Setter
@Table(schema = "newschema_dbo", name = "jncdestofficebcstoffice")
public class JnLctnAtcRegionsGlobColtOffice {
    @Id
    @Column(name="jncsestofficebcstofficeid")
    private Integer jncsestofficebcstofficeId;
    
    @Column(name="creationdtsrv")
    private Timestamp creationDtSrv;

    @Column(name="createdby")
    private String createdBy;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="abCstOfficeId", referencedColumnName = "abCstOfficeId")
    private abCstOffice abCstOffice;

    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="cdEstOfficeId", referencedColumnName = "cdEstOfficeId")
    private cdEstOffice cdEstOffice;
}

The database has the column as abcstofficeid, but after upgrading to springboot 3.4.3 it seems to pick up the column name as ab_cst_office_id

Seeing this issue after upgrading springboot to 3.4.3 (automatic upgrade of hibernate ORM 6.6.8-Final). There was no issue with springboot 3.2.3 (hibernate ORM 6.4.4-Final)

.hibernate.exception.SQLGrammarException: JDBC exception executing SQL ERROR: column jlargco1_0.ab_cst_office_id does not exist
  Hint: Perhaps you meant to reference the column "jlargco1_0.abcstofficeid".
  Position: 1495] [n/a]
    at .hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:91) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:268) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:171) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.<init>(JdbcValuesResultSetImpl.java:74) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.resolveJdbcValuesSource(JdbcSelectExecutorStandardImpl.java:355) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:137) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:102) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.spi.JdbcSelectExecutor.executeQuery(JdbcSelectExecutor.java:91) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:165) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:145) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:117) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:74) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3895) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3884) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:590) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:560) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:544) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.loadWithRegularProxy(DefaultLoadEventListener.java:289) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:241) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:110) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:69) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1229) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1217) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:210) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.doLoad(IdentifierLoadAccessImpl.java:161) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.lambda$load$1(IdentifierLoadAccessImpl.java:150) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.perform(IdentifierLoadAccessImpl.java:113) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:150) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.find(SessionImpl.java:2459) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at .hibernate.internal.SessionImpl.find(SessionImpl.java:2430) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    at .springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) ~[spring-orm-6.2.3.jar:6.2.3]
    at jdk.proxy4/jdk.proxy4.$Proxy153.find(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    at .springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) ~[spring-orm-6.2.3.jar:6.2.3]
    at jdk.proxy4/jdk.proxy4.$Proxy153.find(Unknown Source) ~[na:na]
    at .springframework.data.jpa.repository.support.SimpleJpaRepository.findById(SimpleJpaRepository.java:325) ~[spring-data-jpa-3.4.3.jar:3.4.3]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]

Entity table as follows:

import lombok.Getter;
import lombok.Setter;

import jakarta.persistence.*;
import java.sql.Timestamp;

@Entity
@Getter
@Setter
@Table(schema = "newschema_dbo", name = "jncdestofficebcstoffice")
public class JnLctnAtcRegionsGlobColtOffice {
    @Id
    @Column(name="jncsestofficebcstofficeid")
    private Integer jncsestofficebcstofficeId;
    
    @Column(name="creationdtsrv")
    private Timestamp creationDtSrv;

    @Column(name="createdby")
    private String createdBy;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="abCstOfficeId", referencedColumnName = "abCstOfficeId")
    private abCstOffice abCstOffice;

    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="cdEstOfficeId", referencedColumnName = "cdEstOfficeId")
    private cdEstOffice cdEstOffice;
}

The database has the column as abcstofficeid, but after upgrading to springboot 3.4.3 it seems to pick up the column name as ab_cst_office_id

Share Improve this question asked Mar 17 at 12:06 Divya MurugananthamDivya Muruganantham 517 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

I encountered something a bit similar to your issue. Not the same issue, though. I wrote my entity classes in the following approach and it resolved the issues for me.

You can try this and see if it works. I have updated the entity class for you.

@Entity
@Getter
@Setter
@Table(schema = "newschema_dbo", name = "jncdestofficebcstoffice")
public class test {
    @Id
    @Column(
            name="jncsestofficebcstoffice_id"
    )
    private Integer jncsestofficebcstofficeId;

    @Column(
            name="creation_dt_srv"
    )
    private Timestamp creationDtSrv;

    @Column(
            name="created_by"
    )
    private String createdBy;

    @JoinColumn(
            name="ab_cst_office_id"
    )
    @ManyToOne(
            targetEntity = abCstOffice.class,
            fetch = FetchType.LAZY,
            cascade = CascadeType.PERSIST
    )
    private abCstOffice abCstOffice;

    @Column(
            name = "ab_cst_office_id",
            insertable = false,
            updatable = false,
            nullable = false //change this as per your use-case
    )
    private UUID abCstOfficeId;

    @JoinColumn(
            name="cd_est_office_id"
    )
    @OneToOne(
            targetEntity = cdEstOffice.class,
            fetch = FetchType.LAZY,
            cascade = CascadeType.PERSIST
    )
    private cdEstOffice cdEstOffice;

    @Column(
            name = "cd_est_office_id",
            insertable = false,
            updatable = false,
            nullable = false //change this as per your use-case
    )
    private UUID cdEstOfficeId;
}

I think separately using the @Column annotation removes the Hibernate confusion.

发布评论

评论列表(0)

  1. 暂无评论