简体   繁体   English

错误:Spring Data Jpa 中的列名 ID 无效

[英]Error: The column name id is not valid from Spring Data Jpa

I am trying to find some records from a table using Spring Data Jpa but I keep getting error that says The column id is not valid.我正在尝试使用 Spring Data Jpa 从表中查找一些记录,但我不断收到错误消息,指出列 ID 无效。 I have searched online for solutions like The column name is not valid - error , The column name is not valid , Spring Data JPA "The column name Id is not valid" and the solutions have not helped my specific case.我在网上搜索了诸如列名无效 - 错误列名无效Spring Data JPA“列名 Id 无效”之类的解决方案,这些解决方案对我的具体情况没有帮助。 So I decided to ask for help here.所以我决定在这里寻求帮助。

The error occurs when I hit the controller from postman localhost:8080//api/portal/portal-user当我从 postman localhost:8080//api/portal/portal-user 点击控制器时发生错误

The get request enters the controller and stops at portal_usersRepository.findApprovedUsers(); get请求进入控制器并在portal_usersRepository.findApprovedUsers()处停止; it doesn't enter the service class but throws that error at the point of queryin the dB.它不会进入服务类,但会在 dB 中的查询点抛出该错误。

PS: The dB table am working with is a legacy table with a lot of null columns. PS:正在使用的 dB 表是一个带有大量空列的旧表。

Below is the entity class:下面是实体类:


    @Data
    @Entity
    @Table(name = "PORTAL_USER")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    public class Portal_User implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "ID")
        private Long id;

        @Column(name = "SURNAME")
        private String surname;

        @Column(name = "FIRSTNAME")
        private String firstname;

        @Column(name = "OTHER_NAME")
        private String otherName;

        @Column(name = "EMAIL")
        private String email;

        @Column(name = "PHONE_NUMBER")
        private String phoneNumber;

        @Column(name = "USER_ID")
        private String userId;

        @Column(name = "APPROVED")
        private Boolean approved;

        @ManyToOne
        @JoinColumn(name = "DEPARTMENT_FK", referencedColumnName = "id")
        private Department departmentFk;

        @ManyToOne
        @JoinColumn(name = "PORTAL_USER_TYPE_FK", referencedColumnName = "id")
        private Portal_User_Type portalUserTypeFk;

        @ManyToOne
        @JoinColumn(name = "MINISTRY_FK", referencedColumnName = "id")
        private Ministry ministryFk;

        @ManyToOne
        @JoinColumn(name = "AGENCY_FK", referencedColumnName = "id")
        private Agency agencyFk;

        @Column(name = "GENDER")
        private String gender;

        @Column(name = "DATE_OF_BIRTH")
        private Date dateOfBirth;

        @Column(name = "STREET_NUMBER")
        private String streetNumber;

        @Column(name = "POSTCODE")
        private String postcode;

        @ManyToOne
        @JoinColumn(name = "COUNTRY_FK", referencedColumnName = "id")
        private Country countryFk;

        @Column(name = "NATIONALITY")
        private String nationality;

        @Column(name = "ADDRESS")
        private String address;

        @Column(name = "CITY")
        private String city;

        @Column(name = "STATE")
        private String state;

        @Column(name = "LGA")
        private String lga;

        @Column(name = "ACCREDITATION_NUMBER")
        private String accreditationNumber;

        @ManyToOne
        @JoinColumn(name = "PICK_UP_LOCATIONS_FK", referencedColumnName = "id")
        private Pick_Up_Locations pickUpLocations_fk;

        @Column(name = "OCCUPATION")
        private String occupation;

        @Column(name = "IS_ACCREDITED_USER")
        private Boolean isAccreditedUser;

        @OneToOne(targetEntity = CAC_Branch_Location.class)
        @JoinColumn(name = "CAC_BRANCH_LOCATION_FK", referencedColumnName = "id")
        private CAC_Branch_Location branchLocation;

        @Column(name = "STAFF_ID")
        private String staffId;

        @Column(name = "IS_CUSTOMER")
        private Boolean isCustomer;

        @Column(name = "NIN")
        private String nin;

        @Column(name = "identityType")
        private String identityType;

        @Column(name = "PWD")
        private String PWD;

        @Column(name = "IS_A_SPECIAL_ACCESS_USER")
        private Boolean isASspecialAccessUser;

        @Column(name = "UPDATING_OFFICE")
        private String updatingOffice;

        @Column(name = "PASSWORD")
        private String password;

        @Column(name = "DATE_CREATED")
        private Date dateCreated;

        @Column(name = "EMAIL_ADDRESS_VERIFIED")
        private Boolean emailAddressVerified;

        @Column(name = "PHONE_NUMBER_VERIFIED")
        private Boolean phoneNumberVerified;

        @Column(name = "LOCKED_OUT")
        private Boolean lockedOut;

        @Column(name = "LOCKOUT_DATE")
        private Date lockoutDate;

        @Column(name = "STATUS")
        private String status;

        @Column(name = "SECRET_QUESTION")
        private String secretQuestion;

        @Column(name = "SECRET_QUESTION_ANSWER")
        private String secretQuestionAnswer;

        @Column(name = "CONTACT_ADDRESS")
        private String contactAddress;

        @OneToOne(targetEntity = Address.class)
        @JoinColumn(name = "ADDRESS_FK", referencedColumnName = "id")
        private Address addressFk;

        @ManyToOne
        @JoinColumn(name = "NATIONALITY_FK", referencedColumnName = "id")
        private Nationality nationalityFk;

        @Column(name = "USERNAME")
        private String username;

        @JsonIgnore
        @ManyToMany
        @JoinTable(name = "portal_user_role",
                joinColumns = @JoinColumn(name = "PORTAL_USER_FK"),
                inverseJoinColumns = @JoinColumn(name = "ROLE_FK"))
        private List<Role> roles;

        @Transient
        private long noOfTasks;

        @Transient
        private AccreditationUserRequests accreditationUserRequests;

        public Portal_User() {
        }

        public Portal_User(Long id, String username, String email) {
            this.id = id;
            this.email = email;
            this.username = username;
        }

        public Portal_User(Long id, String surname, String firstname, String otherName) {
            this.id = id;
            this.surname = surname;
            this.firstname = firstname;
            this.otherName = otherName;
        }

        public Portal_User(List<Role> roles) {
            this.roles = roles;
        }


        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null) {
                return false;
            }
            Portal_User user = (Portal_User) o;
            return Objects.equals(id, user.getId());
        }

        @Override
        public int hashCode() {
            return Objects.hash(id);
        }

        @Transient
        public String getFullNames(){
            String fullNames = this.getFirstname();
            if (this.getOtherName()!=null && this.getOtherName().length() > 0){
                fullNames += " "+this.getOtherName();
            }
            fullNames += " "+this.getSurname();
            return fullNames;
        }

        @Transient
        public String getFullAddress2() {
            String anAddress = "";

            if (!Strings.isNullOrEmpty(this.address)) {
                anAddress = anAddress + this.address;
            }

            if (!Strings.isNullOrEmpty(this.city)) {
                if (Strings.isNullOrEmpty(anAddress)) {
                    anAddress = this.city;
                } else {
                    anAddress = anAddress + ", " + this.city;
                }

            }
            if (!Strings.isNullOrEmpty(this.state)) {
                if (Strings.isNullOrEmpty(anAddress)) {
                    anAddress = this.state;
                } else {
                    anAddress = anAddress + ", " + this.state;
                }
            }

            return anAddress;
        }
    }




This is my service class:这是我的服务类:

@Data
@Service
public class Portal_UserService {


    @Autowired
    private Portal_UsersRepository portal_usersRepository;


    public List<PortalUserDto> findPortalUsers(List<Portal_User> portal_users) {
        System.out.println("Hello SERVICE...>>>");

        List<PortalUserDto> portalUserDtoList = new ArrayList<>();
        if (portal_users != null && !portal_users.isEmpty()) {
            portal_users.stream().map(portalUserReport -> {


                PortalUserDto portalDto = new PortalUserDto();

                portalDto.setFirstname(portalUserReport.getFirstname());
                portalDto.setSurname(portalUserReport.getSurname());
                portalDto.setEmail(portalUserReport.getEmail());
                portalDto.setApproved(portalUserReport.getApproved());

                return portalDto;
            }).forEachOrdered(portalDto -> {
                portalUserDtoList.add(portalDto);
            });
        }
        return portalUserDtoList;
    }

}


Here is a snippet from my controller:这是我的控制器的一个片段:

    @GetMapping("/portal-user")
    public ResponseEntity<Object> findPortalByApproved() {
        List<PortalUserInterface> portalUsers = portal_usersRepository.findApprovedUsers();
        List<PortalUserDto> userDtoList = new ArrayList<>();

        System.out.println("Hello CONTROLLER...>>>");
        if (portalUsers != null) {
            portalUsers.forEach((portalUser) -> {

                PortalUserDto userDto = new PortalUserDto();

                userDto.setFirstname(portalUser.getFirstname());
                userDto.setSurname(portalUser.getSurname());
                userDto.setEmail(portalUser.getEmail());
                userDto.setApproved(portalUser.getApproved());

                userDtoList.add(userDto);
            });

        }
            return ResponseEntity.ok(new JsonResponse("See Data Object for Details", userDtoList));

        }


UPDATE更新

Here is my repository:这是我的存储库:

public interface Portal_UsersRepository extends JpaRepository<Portal_User, Long> {

    @Query(value="SELECT FIRSTNAME, SURNAME, EMAIL FROM PORTAL_USER "
            + "WHERE APPROVED = 1 "
            + "ORDER BY ID DESC ", nativeQuery = true)
    List<Portal_User> findApprovedPortalUsers();


    @Query(value="SELECT FIRSTNAME, SURNAME, EMAIL FROM PORTAL_USER "
            + "WHERE APPROVED = 1 "
            + "ORDER BY ID DESC ", nativeQuery = true)
    List<PortalUserInterface> findApprovedUsers();
}

When I use the entity in my controller like this:当我像这样在控制器中使用实体时:
List<Portal_User> portalUsers = portal_usersRepository.findApprovedPortalUsers(); List<PortalUserDto> userDtoList = new ArrayList<>();

I get the following error trace:我收到以下错误跟踪:


...SYSTEM LAUNCHED!!!
2020-09-29 21:28:01.452  INFO 32616 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-09-29 21:28:01.456  INFO 32616 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-09-29 21:28:01.468  INFO 32616 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 12 ms
Hibernate: SELECT FIRSTNAME, SURNAME, EMAIL FROM PORTAL_USER WHERE APPROVED = 1 ORDER BY ID DESC 
2020-09-29 21:28:37.894  WARN 32616 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: S1093
2020-09-29 21:28:37.894 ERROR 32616 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : The column name id is not valid.
2020-09-29 21:28:37.914 ERROR 32616 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not execute query; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query] with root cause

com.microsoft.sqlserver.jdbc.SQLServerException: The column name id is not valid.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:234) ~[mssql-jdbc-7.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(SQLServerResultSet.java:686) ~[mssql-jdbc-7.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getLong(SQLServerResultSet.java:2328) ~[mssql-jdbc-7.4.1.jre8.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) ~[HikariCP-3.4.5.jar:na]
    at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:63) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:808) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:732) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.getRowsFromResultSet(Loader.java:1044) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.processResultSet(Loader.java:995) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:964) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:350) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2887) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2869) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2701) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2696) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2142) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1163) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:173) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.hibernate.query.Query.getResultList(Query.java:165) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:126) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:142) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor$QueryMethodInvoker.invoke(QueryExecutorMethodInterceptor.java:195) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:130) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at com.sun.proxy.$Proxy119.findApprovedPortalUsers(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at com.sun.proxy.$Proxy67.findApprovedPortalUsers(Unknown Source) ~[na:na]
    at com.oasis.isds.executivedashboard.controller.PortalUsersController.findPortalByApproved(PortalUsersController.java:34) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.38.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.38.jar:4.0.FR]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

2020-09-29 21:56:23.953  WARN 32616 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=14m3s351ms76µs200ns).

And When I use PortalUserInterface, List<PortalUserInterface> portalUsers = portal_usersRepository.findApprovedUsers();当我使用 PortalUserInterface 时, List<PortalUserInterface> portalUsers = portal_usersRepository.findApprovedUsers();

I get this error:我收到此错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Read timed out
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2924) ~[mssql-jdbc-7.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:2029) ~[mssql-jdbc-7.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:6418) ~[mssql-jdbc-7.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:7579) ~[mssql-jdbc-7.4.1.jre8.jar:na]

Here is a snippet from my pom.xml这是我的 pom.xml 中的一个片段



    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>



Please help me because this error is happening in different controllers I am using for this project.请帮助我,因为此错误发生在我用于该项目的不同控制器中。 I have spent hours trying to fix it to no avail.我花了几个小时试图修复它但无济于事。 I would appreciate your help.我会很感激你的帮助。

I was able to identify the cause of this problem and fixed it, so I decided to share for the benefit of others.我能够确定这个问题的原因并修复它,所以我决定为了他人的利益而分享。 The approach that worked was using an interface to fetch the records.有效的方法是使用接口来获取记录。 But this approach did not work initially because the database table has over 4 million records.但是这种方法最初不起作用,因为数据库表有超过 400 万条记录。 That was why I was getting the read timed out error.这就是为什么我收到读取超时错误的原因。 I only discovered this after running my project in debug mode as I was not notified of the size of the table initially.我只是在调试模式下运行我的项目后才发现这一点,因为我最初没有被通知表的大小。 So here is how I queried the database....所以这就是我查询数据库的方式....

I reduced the search to TOP 5000 ... and it worked!我将搜索减少到前 5000 名……它奏效了!

    @Query(value="SELECT TOP 5000 FIRSTNAME, SURNAME, EMAIL FROM PORTAL_USER "
            + "WHERE APPROVED = 1 "
            + "ORDER BY ID DESC ", nativeQuery = true)
    List<PortalUserInterface> findApprovedUsers();

Here is the interface I used for fetching the records from the repository这是我用来从存储库中获取记录的接口

public interface PortalUserInterface {

    public Long getId();
    
    public String getFirstname();

    public String getSurname();

    public String getEmail();

}

This was how I solved the problem.这就是我解决问题的方法。

Thanks to all who contributed one way or the other.感谢所有以某种方式做出贡献的人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用 Spring 数据 JPA 运行存储过程时遇到问题 - SQLServerException:列名 id 无效 - Trouble Running a Stored Procedure Using Spring Data JPA - SQLServerException: The column name id is not valid Spring数据JPA - 从一个实体参数中排除ID列 - Spring data JPA - Exclude ID column from one entity parameter 列名称作为Spring Data JPA查询的参数 - Column name as a parameter to Spring Data JPA Query DB 列上的 Spring JPA 错误返回与列名相关的错误 - Spring JPA error on DB column returns error related to column name Spring Data JPA:@Query给出错误java.sql.SQLException:找不到列“ id” - Spring Data JPA: @Query gives error java.sql.SQLException: Column 'id' not found 错误:关系 xxx 的“id”列中的 null 值违反非空约束 - Spring 数据 JPA - ERROR: null value in column "id" of relation xxx violates not-null constraint - Spring Data JPA 从 spring jpa 中的多到多列中检索数据 - retrieving data from many to many extra column in spring jpa uisng an id 无法覆盖默认ID列弹簧数据JPA - Cannot override default id column spring data JPA 列名无效 - 错误 - The column name is not valid - error 有没有办法在使用 Spring Data JPA 的查询中使用列名作为参数? - Is there a way to use column name as a parameter in a query using Spring Data JPA?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM