SqlResultSetMapping未知映射错误

我正在使用Spring Boot Rest API,并且我早些时候问过一个有关将pojo类映射到结果集的问题 Could not locate appropriate constructor on class .....

我得到了有效的答案,但是当我仅使用一个实体类和一个SqlResultSetMapping文件时。

我的StackTrace:

javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown SqlResultSetMapping [UserMapping]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
    at org.hibernate.internal.AbstractSharedSessionContract.createNativeQuery(AbstractSharedSessionContract.java:1035)
    at org.hibernate.internal.AbstractSharedSessionContract.createNativeQuery(AbstractSharedSessionContract.java:109)
    at com.app.ecclesiamainframe.service.impl.UsersServiceImpl.findByusername(UsersServiceImpl.java:89)
    at com.app.ecclesiamainframe.service.impl.UsersServiceImpl$$FastClassBySpringCGLIB$$ae026741.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodinvocation.invokeJoinpoint(CglibAopProxy.java:769)
Caused by: org.hibernate.MappingException: Unknown SqlResultSetMapping [UserMapping]
    at org.hibernate.query.internal.NativeQueryImpl.setResultSetMapping(NativeQueryImpl.java:147)
    at org.hibernate.internal.AbstractSharedSessionContract.createNativeQuery(AbstractSharedSessionContract.java:1031)
    ... 64 more

我的会员实体:

 * 
 */
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",@ColumnResult(name = "address"),@ColumnResult(name = "age"),@ColumnResult(name = "areaId",@ColumnResult(name = "birthday"),@ColumnResult(name = "cellId",@ColumnResult(name = "dca"),@ColumnResult(name = "department"),@ColumnResult(name = "editor"),@ColumnResult(name = "firstTime"),@ColumnResult(name = "gender"),@ColumnResult(name = "maritalStatus"),@ColumnResult(name = "memberEmail"),@ColumnResult(name = "memberHomePhoneNum",@ColumnResult(name = "memberMobileNum",@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;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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;
}

}

我的用户实体:

 * 
 */
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.springframework.security.authentication.encoding.Md5PasswordEncoder;
//import org.springframework.security.authentication.encoding.PasswordEncoder;

import lombok.Data;

/**
 * @author Harry
 *
 */
@Entity
@Table(name="users_tb")
@Data

@SqlResultSetMapping(
    name = "UserMapping",classes = @ConstructorResult(
    targetclass = Users.class,columns = {
        @ColumnResult(name = "userId",@ColumnResult(name = "username"),@ColumnResult(name = "password"),@ColumnResult(name = "name"),@ColumnResult(name = "permission")
    }))
public class Users implements Serializable {

    /**
 * 
 */
 public Users() {}

 private static final long serialVersionUID = 1L;

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

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

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

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

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

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


//  public String getPassword() {
//      return password;
//  }

//  public void setPassword(String password) {
//      PasswordEncoder crypto = new Md5PasswordEncoder();
//      this.password = crypto.encodePassword(password,null);
//  }

    public Users(Long userId,String username,String password,String name,String permission) {

        this.userId = userId;
        this.username = username;
        this.password = password;
        this.name = name;
        this.areaId = areaId;
        this.permission = permission;
    }

}

我的MemberServiceImpl:

 * 
 */
package com.app.ecclesiamainframe.service.impl;

import java.util.List;
import java.util.Optional;

import javax.persistence.Query;
import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;

import org.hibernate.Session;
import org.hibernate.Transaction;

import org.springframework.stereotype.Service;

import com.app.ecclesiamainframe.dao.MembersDao;
import com.app.ecclesiamainframe.entity.Members;
import com.app.ecclesiamainframe.service.MembersService;
import com.app.ecclesiamainframe.util.HibernateUtil;
/**
 * @author Harry
 *
 */
@Service
public class MembersServiceImpl implements MembersService {
    Session session = null;
    Transaction transaction = null;
    @Autowired
    private MembersDao membersDao;

    public MembersServiceImpl() {
        super();
    }

    @Transactional
    public Members saveMember(Members member) {
        // TODO Auto-generated method stub
        return membersDao.save(member);
    }

    @Transactional
    public Members updateMembers(Members member) {
        // TODO Auto-generated method stub
        return membersDao.saveAndFlush(member);
    }

                @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;
                }   

    @Transactional
    public List<Members> getMembers() {
        // TODO Auto-generated method stub
        return membersDao.findAll();
    }

    @Transactional
    public Optional<Members> getMember(Long memberId) {
        // TODO Auto-generated method stub
        return membersDao.findById(memberId);
    }

    @Transactional
    public void deleteMember(Long memberId) {
        // TODO Auto-generated method stub
        membersDao.deleteById(memberId);
    }

}


我的UserServiceImpl:

         * 
         */
        package com.app.ecclesiamainframe.service.impl;

        import java.util.ArrayList;
        import java.util.Collection;
        import java.util.List;
        import java.util.Optional;

        import javax.persistence.Query;
        import javax.transaction.Transactional;

        import org.springframework.beans.factory.annotation.Autowired;

        import org.hibernate.Session;
        import org.hibernate.Transaction;

        //import org.primefaces.component.inputtext.InputText;
        //import org.springframework.security.core.GrantedAuthority;
        //import org.springframework.security.core.authority.SimpleGrantedAuthority;
        //import org.springframework.security.core.userdetails.User;
        //import org.springframework.security.core.userdetails.UserDetails;
        //import org.springframework.security.core.userdetails.UsersService;
        //import org.springframework.security.core.userdetails.usernameNotFoundException;


        import org.springframework.stereotype.Service;

        import com.app.ecclesiamainframe.dao.UsersDao;
        import com.app.ecclesiamainframe.entity.Users;
        import com.app.ecclesiamainframe.service.UsersService;
        import com.app.ecclesiamainframe.util.HibernateUtil;

        /**
         * @author Harry
         *
         */
        @Service
        public class UsersServiceImpl implements UsersService {
            Session session = null;
            Transaction transaction = null;
            @Autowired
            private UsersDao usersDao;

            public UsersServiceImpl() {
                super();
            }

            @Transactional
            public Users saveUser(Users user) {
                // TODO Auto-generated method stub
                return usersDao.save(user);
            }

            @Transactional
            public Users updateUser(Users user) {
                // TODO Auto-generated method stub
                return usersDao.saveAndFlush(user);
            }

            @Transactional
            public List<Users> getUsers() {
                // TODO Auto-generated method stub
                return usersDao.findAll();
            }

            @Transactional
            public Optional<Users> getUser(Long userId) {
                // TODO Auto-generated method stub
                return usersDao.findById(userId);
            }

            @Transactional
            public void deleteUser(Long userId) {
                // TODO Auto-generated method stub
                usersDao.deleteById(userId);
            }

            //@SuppressWarnings("unchecked")
            @Transactional
            public Users findByusername(String username) {
                //return usersDao.findByMemberName(memberName);
                 Users users = null;
                try {
                     session = HibernateUtil.getSessionFactory().openSession();
                     transaction = session.beginTransaction();
                  // Native query selecting all columns
                     Query query = session.createNativeQuery("SELECT * FROM users_tb where username like :username","UserMapping")
                             .setParameter("username","%"+username+"%"); //named parameter binding 
                     users = (Users) query.getSingleResult();
                     transaction.commit(); 
                  } catch (Exception e) {
                     e.printStackTrace();
                  } finally {
                     if (session != null) {
                        session.close();
                     }
                  }
                 // HibernateUtil.shutdown();
                  return users;
            }

我的问题是

我有几个实体,例如成员,用户,课程,并且我为每个类设计了一个SqlResultSetMapping文件。但是当我测试我的API时,只有Member类获得正确的响应和映射,用户实体服务实现返回未知的SqlResultSetMapping [UserMapping] ...

phoneix_l 回答:SqlResultSetMapping未知映射错误

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2801247.html

大家都在问