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
}
(列和变量名称在发布问题后更改)我在 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
}