JPA 本机查询结果集映射到具有子类的实体类
Posted
技术标签:
【中文标题】JPA 本机查询结果集映射到具有子类的实体类【英文标题】:JPA Native Query Result Set Mapping to Entity class having child class 【发布时间】:2019-05-16 16:24:35 【问题描述】:(发布问题后列和变量名更改)当我运行代码时,我正在使用 jpa 自定义方法中的 entityManager.createNativeQuery(somequery) 编写连接查询,但出现以下错误:
com.ibm.db2.jcc.am.SqlException:[jcc][10150][10300][4.12.56] 无效>参数:未知列名 exc_seq_nbr。 ERRORCODE=-4460,SQLSTATE=null
我正在使用 IBM DB2 服务器和 Spring Boot
exceptionTenderPK(实体类中的对象)未正确映射,这就是为什么获取无效列的原因有人可以告诉我如何映射 exceptionTenderPK 对象类
注意:在这种情况下我不能使用@OneToMany,因为表是不相关的
@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;
【问题讨论】:
【参考方案1】:错误表明没有列 exc_seq_nbr,您在 EntityResult 映射中使用了该列。
在您的查询中,您只返回 et.SLS_DTE 您必须返回结果集映射中的所有列。
【讨论】:
您好,感谢您的回复,我更改了查询并选择了所有列仍然得到完全相同的错误【参考方案2】:大家好,因为我没有得到任何解决方案,我将使用下面的解决方案,它对我有用,并且在没有 sql 结果集映射的情况下删除下面代码的 @SqlResultSetMapping 也可以工作
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
【讨论】:
以上是关于JPA 本机查询结果集映射到具有子类的实体类的主要内容,如果未能解决你的问题,请参考以下文章
EclipseLink 拒绝将 PostgreSQL 上的本机查询映射到实体
使用 JPA 2.1,我如何将本机查询结果映射到 @Transient 字段(taht is a Set)?