JPA 本机查询结果集映射到具有 child class 的实体 class

JPA Native Query Result Set Mapping to Entity class having child class

(列和变量名称在发布问题后更改)我在 jpa 自定义方法中使用 entityManager.createNativeQuery(somequery) 编写连接查询,当我 运行 代码出现以下错误时:

com.ibm.db2.jcc.am.SqlException: [jcc][10150][10300][4.12.56] Invalid >parameter: Unknown column name exc_seq_nbr. ERRORCODE=-4460, SQLSTATE=null

i am using IBM DB2 server and spring boot

exceptionTenderPK(实体 class 中的 object)未正确映射,这就是为什么列无效的原因 有人可以告诉我如何映射 exceptionTenderPK object class

Note: i cant use @OneToMany in this case because tables are unrelated

@Entity
@Table(name = "Table_name")


@Data
public class MainPojoclass {
    
    @EmbeddedId
    @JsonProperty(value = "mainPojoclassPK")
    private MainPojoclassPK mainPojoclassPK;
    

    @Column(name = "amt")
    @JsonProperty(value = "amt")
    private BigDecimal amt;
    
    @Column(name = "tndid")
    @JsonProperty(value = "tndid")
    private String tndid;
    
    @Column(name = "cde")
    @JsonProperty(value = "cde")
    private String cde;
    
    @Column(name = "ind")
    @JsonProperty(value = "ind")
    private String ind;
    
    @Column(name = "user")
    @JsonProperty(value = "user")
    private String user;
    
    @Column(name = "updatedtime")
    @JsonProperty(value = "updatedtime")
    private Date updatedtime;
    
    @Column(name = "src")
    @JsonProperty(value = "src")
    private String src;
    
    @Column(name = "stat")
    @JsonProperty(value = "stat")
    private String stat;
    


}

@Transactional
public interface JoinQueryRepository extends JpaRepository<MainPojoclass, Long>, JoinQueryRepositoryCustom{
    
}

public interface JoinQueryRepositoryCustom {
    
    List<MainPojoclass> getGRDetails(MainPojoclass et,Date reportDate);

}

public class JoinQueryRepositoryImpl implements JoinQueryRepositoryCustom {

    @PersistenceContext
    EntityManager entityManager;

    @SuppressWarnings("all")
    @Override
    public List<MainPojoclass> getGRDetails(MainPojoclass et,Date rdate) {
String queryStr = "select et.Salss_DTE from table et"
                + " join dte etr on et.Salss_DTE = etr.Salss_DTE where et.nbr =? ";
        
        List<MainPojoclass> datalist = null;
                
        Query query =   entityManager.
                createNativeQuery(queryStr,"mapping")
                .setParameter(1, 222);
        datalist = query.getResultList();

        return datalist;

    }

}

错误表明没有列 exc_seq_nbr 而您在 EntityResult 映射中使用了该列。

在您的查询中,您只需 return et.SLS_DTE 您必须 return 结果集映射中的所有列。

大家好,因为我没有得到任何解决方案,所以我将使用下面的解决方案,它对我有用,删除@SqlResultSetMapping 下面的代码在没有 sql 结果集映射

的情况下工作
Query q = em.createNativeQuery(queryStr);
List<Object[]> resultList = q.getResultList();

for (Object[] result : resultList) {
   entityObj.setReason(result[0].toString);
//rest attribute will convert from result[1].toString to corresponding
// data type and set to entity object
}