当前位置: 首页 > 知识库问答 >
问题:

未能在类上找到适当的构造函数

廖弘伟
2023-03-14

我试图将本机SQL结果映射到POJO,但它返回了一个错误。以下是完整的堆栈跟踪:

Hibernate: SELECT * FROM members_tb where memberName like ?
2019-12-19 07:40:20.688 TRACE 32472 --- [nio-8084-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [%Frank%]
java.lang.IllegalArgumentException: Could not locate appropriate constructor on class : com.app.ecclesiamainframe.entity.Members
    at org.hibernate.loader.custom.ConstructorResultColumnProcessor.resolveConstructor(ConstructorResultColumnProcessor.java:92)
    at org.hibernate.loader.custom.ConstructorResultColumnProcessor.performDiscovery(ConstructorResultColumnProcessor.java:45)
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:494)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:2338)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2294)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2050)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2012)
    at org.hibernate.loader.Loader.doQuery(Loader.java:953)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
    at org.hibernate.loader.Loader.doList(Loader.java:2815)
    at org.hibernate.loader.Loader.doList(Loader.java:2797)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2629)
    at org.hibernate.loader.Loader.list(Loader.java:2624)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2123)
    at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1134)
    at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:173)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1526)
    at org.hibernate.query.Query.getResultList(Query.java:165)
    at com.app.ecclesiamainframe.service.impl.MembersServiceImpl.findByMembername(MembersServiceImpl.java:63)
    at com.app.ecclesiamainframe.service.impl.MembersServiceImpl$$FastClassBySpringCGLIB$$b6791a90.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:769)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
    at com.app.ecclesiamainframe.service.impl.MembersServiceImpl$$EnhancerBySpringCGLIB$$81c0914a.findByMembername(<generated>)
    at com.app.ecclesiamainframe.controller.MembersController.getMember(MembersController.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
2019-12-19 07:40:21.744  INFO 32472 --- [nio-8084-exec-2] i.StatisticalLoggingSessionEventListener : Session Metrics {
    1250700 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    0 nanoseconds spent preparing 0 JDBC statements;
    0 nanoseconds spent executing 0 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
}
2019-12-19 08:39:48.231  WARN 32472 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=45s935ms542µs800ns).
2019-12-19 08:46:56.149  WARN 32472 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=3m17s562ms942µs).
2019-12-19 08:46:57.264  WARN 32472 --- [l-2 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-2 - Thread starvation or clock leap detected (housekeeper delta=3m17s563ms485µs800ns).

这是我的Membermapping.xml:

<sql-result-set-mapping name="MemberMappingXml">
    <constructor-result target-class="com.app.ecclesiamainframe.entity.Members">
      <column name="memberId" />
      <column name="dcaRegno" />
      <column name="address" />
      <column name="age" />
      <column name="areaId" />
      <column name="birthday" />
      <column name="cellId" />
      <column name="dca" />
      <column name="department" />
      <column name="editor" />
      <column name="firstTime" />
      <column name="gender" />
      <column name="maritalStatus" />
      <column name="memberEmail" />
      <column name="memberHomePhoneNum" />
      <column name="memberMobileNum" />
      <column name="memberName" />
      <column name="note" />
      <column name="secondTime" />      
    </constructor-result>
</sql-result-set-mapping>

这是我的实体类:

/**
 * 
 */
package com.app.ecclesiamainframe.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.ColumnResult;
import javax.persistence.ConstructorResult;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.Table;

import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

import com.vladmihalcea.hibernate.type.json.JsonStringType;

import lombok.Data;

/**
 * @author Harry
 *
 */
@Entity
@Table(name="members_tb")
@Data
@TypeDef(
    name = "json", 
    typeClass = JsonStringType.class
)
@SqlResultSetMapping(
    name = "MemberMapping",
    classes = @ConstructorResult(
        targetClass = Members.class,
        columns = {
            @ColumnResult(name = "memberId", type = Long.class),
            @ColumnResult(name = "dcaRegno", type = Long.class),
            @ColumnResult(name = "address"),
            @ColumnResult(name = "age"),
            @ColumnResult(name = "areaId", type = Long.class),
            @ColumnResult(name = "birthday"),
            @ColumnResult(name = "cellId", type = Long.class),
            @ColumnResult(name = "dca"),
            @ColumnResult(name = "department"),
            @ColumnResult(name = "editor"),
            @ColumnResult(name = "firstTime"),
            @ColumnResult(name = "gender"),
            @ColumnResult(name = "maritalStatus"),
            @ColumnResult(name = "memberEmail"),
            @ColumnResult(name = "memberHomePhoneNum", type = Long.class),
            @ColumnResult(name = "memberMobileNum", type = Long.class),
            @ColumnResult(name = "memberName"),
            @ColumnResult(name = "note"),
            @ColumnResult(name = "secondTime")

    }))
public class Members implements Serializable {

    /**
     * 
     */
    public Members() {}


    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="memberId")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long memberId;

    @Column(name="dcaRegno")
    private Long dcaRegno;

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

    @Column(name="memberMobileNum")
    private Long memberMobileNum;

    @Column(name="memberHomePhoneNum")
    private Long memberHomePhoneNum;

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

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

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

    @Type(type = "json")
    @Column(columnDefinition = "json",name="address")
    private String address;

    @Column(name="cellId")
    private Long cellId;

    @Column(name="areaId")
    private Long areaId;

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

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

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

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

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

    @Type(type = "json")
    @Column(columnDefinition = "json",name="dca")
    private String dca;

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

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

    public Members(Long memberId,String memberName) {
        this.memberId = memberId;
        this.memberName = memberName;
    }

    public Members(Long memberId,Long dcaRegno,String memberName,Long memberMobileNum,Long memberHomePhoneNum,String memberEmail,String gender,String department,
               String address,Long cellId,Long areaId,String maritalStatus,String age,String birthday,String firstTime,String secondTime,
               String dca,String note,String editor) {

    this.memberId = memberId;
    this.dcaRegno = dcaRegno;
    this.address = address;
    this.age = age;
    this.areaId = areaId;
    this.birthday = birthday;
    this.cellId = cellId;
    this.dca = dca;
    this.department = department;
    this.editor = editor;
    this.firstTime = firstTime;
    this.gender = gender;
    this.maritalStatus = maritalStatus;
    this.memberEmail = memberEmail;
    this.memberHomePhoneNum = memberHomePhoneNum;
    this.memberMobileNum = memberMobileNum;
    this.memberName = memberName;
    this.note = note;
    this.secondTime = secondTime;
  } 
}

下面是我的成员服务实现:

@Transactional
@SuppressWarnings("unchecked")
public List<Members> findByMembername(String memberName) 
{
    //return membersDao.findByMemberName(memberName);
     List<Members> members = null;
    try {
         session = HibernateUtil.getSessionFactory().openSession();
         transaction = session.beginTransaction();

      // Native query selecting all columns
         Query query = session.createNativeQuery("SELECT * FROM members_tb where memberName like :memberName","MemberMapping")
                 .setParameter("memberName","%"+memberName+"%"); //named parameter binding 
                members = query.getResultList();
         transaction.commit(); 
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         if (session != null) {
            session.close();
         }
      }
     // HibernateUtil.shutdown();
      return members;
}   

请问我如何消除错误并设计一个合适的构造函数???可能是如果我不必将每一列加载到构造函数中,尽管我希望所有列都映射到结果中。

共有3个答案

薛淮晨
2023-03-14

请在pojo类中创建此构造函数。正如我所见,构造函数之间不匹配

希望这对你有用

越鸿才
2023-03-14

列出的列与构造函数参数的顺序不同。

Parameters                  Columns
=========================   ==================
Long   memberId             memberId
Long   dcaRegno             dcaRegno
String memberName           address
Long   memberMobileNum      age
Long   memberHomePhoneNum   areaId
String memberEmail          birthday
String gender               cellId
String department           dca
String address              department
Long   cellId               editor
Long   areaId               firstTime
String maritalStatus        gender
String age                  maritalStatus
String birthday             memberEmail
String firstTime            memberHomePhoneNum
String secondTime           memberMobileNum
String dca                  memberName
String note                 note
String editor               secondTime
狄冠宇
2023-03-14

您必须为此创建一个构造函数。

在您使用SqlResultsetM平的类中创建一个构造函数,并将构造函数中的变量保持在与SqlResultsetM平中的变量相同的顺序

 类似资料:
  • 当我尝试只使用Id作为值并删除列表时,它工作了。

  • 我正在尝试将本机SQL结果映射到我的POJO。下面是配置。我在用Spring。 这是我的课 这里我是怎么称呼它的 但说到线

  • 问题内容: 当我尝试执行此HQL以返回对象时,出现此错误: 错误[org.hibernate.hql.PARSER](http- localhost-127.0.0.1-8080-2)无法在类[br.com.cdv.model.entity.Ponto]上找到适当的构造函数[原因= org.hibernate。 PropertyNotFoundException:类中没有适当的构造函数:br.co

  • 我创建了一个并将其附加到一个实体“Doctor”,在同一个实体上我附加了一个,它获取查询结果的列并将它们映射到一个专门创建的POJO类的构造函数。该查询还连接到一个JPA方法,该方法驻留在同一实体的存储库中。 但是,我不断得到一个错误,即找不到合适的构造函数,好像或POJO构造函数不同步。(堆栈跟踪在底部) 我的实体,和: 我直接在数据库上尝试了查询,它给出了预期的结果,所以我只是编写了selec

  • 问题内容: 我正在实现他们文档中提供的firebase示例。我遇到此错误: com.fasterxml.jackson.databind.JsonMappingException:没有为类型[简单类型,类com.XYZ。$ BlogPost]找到合适的构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?) 这是我的代码: 我在同一件事上经历了很多问题,说要包含反序列化JSON所需的空构造

  • 因此,我有了类、、和。由于类有很多setter和getter,所以我决定将代码放在pastebin中: LogBookEntry 驱动程序 数据库 汽车 因此,正如您在数据库中所看到的,我有两个函数来加载和保存XML数据。 如您所见,类的日期不会保存到XML文件中。这就是为什么我在加载xml文件时会出现以下错误的原因: Okt 22,2017 3:36:33 PM com.sun.xml.inte

  • 我有一个很大的实体类,有很多很多的字段,还有一个投影类,它应该是这个大实体的一部分。 除了@OneTomany字段之外,所有的东西都运行得很好。@OneTomany字段应该是一个地址列表,但当将其转换为投影类时,我总是得到错误“无法定位适当的构造函数[...]预期参数为:long,[...],***.Entity.Address”。 转换器正在搜索单个address对象,而不是address对象列

  • 问题内容: 我是Java的新手,正在尝试为Minecraft制作一个mod,但我不知道如何解决此错误: 这是我的代码: 这是怎么回事,我正在尝试使字符串“ Username”重定向到另一个类。 问题答案: Java编译器告诉您不能构造对象,因为您对构造函数的调用与任何已知的构造函数都不匹配。 具体来说,编译器发现了两个构造函数: 但您致电给: 都不匹配。