We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
作者好, 在研究spring data jpa 类型转换时遇到一点问题, com.blinkfox.fenix.jpa.FenixJpaQuery#doCreateQuery(java.lang.Object[]) 这个方法
protected Query doCreateQuery(Object[] values) { 。。。。。。 if (queryFenix.nativeQuery()) { Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection( new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql); query = type == null ? em.createNativeQuery(querySql) : em.createNativeQuery(querySql, type); } else { /* * 这里不太了解作者为什么不和上面的一样使用 Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection( new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql); query = type == null ? em.createQuery(querySql) : em.createQuery(querySql, type); * / query = em.createQuery(querySql); } 。。。。。。
// 如果自定义设置的返回类型不为空,就做额外的返回结果处理. String resultType = sqlInfo.getResultType(); if (StringHelper.isNotBlank(resultType)) { // 猜测: 应该是为了这里使用 query = new QueryResultBuilder(query, resultType).build(queryFenix.nativeQuery()); }
}
我手动改了下改为:
// 如果自定义设置的返回类型不为空,就做额外的返回结果处理. String resultType = sqlInfo.getResultType(); // TODO: 1.获取 resultType 提前了。 if (queryFenix.nativeQuery()) { Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection( new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql); query = type == null ? em.createNativeQuery(querySql) : em.createNativeQuery(querySql, type); } else { // TODO: 2.这里增加了一个判断 if (StringHelper.isNotBlank(resultType)) { query = em.createQuery(querySql); } else { Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection( new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql); query = (type == null) ? em.createQuery(querySql) : em.createQuery(querySql, type); } }
if (StringHelper.isNotBlank(resultType)) { query = new QueryResultBuilder(query, resultType).build(queryFenix.nativeQuery()); }
这样是否可以?
如果我没有在xml加上 resultType , 而是提供一种通用的javax.persistence.Tuple转DTO的方式来转换
我试了下去掉xml的resultType获取到的结果就是Object[] 了,而正常的@query可以返回 javax.persistence.Tuple 这个类型,因为Tuple 相当于是一个Map, 可以在方法调用链上增加类型转换器, 这样就可以实现通用的转换了,而不再需要每个都写 resultType="com.blinkfox.fenix.example.dto.BlogDto"
可能没有讲明白, 后面我试试提个pr
The text was updated successfully, but these errors were encountered:
No branches or pull requests
作者好, 在研究spring data jpa 类型转换时遇到一点问题, com.blinkfox.fenix.jpa.FenixJpaQuery#doCreateQuery(java.lang.Object[]) 这个方法
protected Query doCreateQuery(Object[] values) {
。。。。。。
if (queryFenix.nativeQuery()) {
Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection( new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql); query = type == null ? em.createNativeQuery(querySql) : em.createNativeQuery(querySql, type); } else { /* * 这里不太了解作者为什么不和上面的一样使用 Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection(
new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql);
query = type == null ? em.createQuery(querySql) : em.createQuery(querySql, type);
* /
query = em.createQuery(querySql);
}
。。。。。。
}
我手动改了下改为:
// 如果自定义设置的返回类型不为空,就做额外的返回结果处理.
String resultType = sqlInfo.getResultType(); // TODO: 1.获取 resultType 提前了。
if (queryFenix.nativeQuery()) {
Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection( new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql); query = type == null ? em.createNativeQuery(querySql) : em.createNativeQuery(querySql, type); } else { // TODO: 2.这里增加了一个判断 if (StringHelper.isNotBlank(resultType)) { query = em.createQuery(querySql); } else { Class type = this.getTypeToQueryFor(jpaMethod.getResultProcessor().withDynamicProjection(
new ParametersParameterAccessor(jpaMethod.getParameters(), values)).getReturnedType(), querySql);
query = (type == null) ? em.createQuery(querySql) : em.createQuery(querySql, type);
}
}
这样是否可以?
如果我没有在xml加上 resultType , 而是提供一种通用的javax.persistence.Tuple转DTO的方式来转换
我试了下去掉xml的resultType获取到的结果就是Object[] 了,而正常的@query可以返回 javax.persistence.Tuple 这个类型,因为Tuple 相当于是一个Map, 可以在方法调用链上增加类型转换器, 这样就可以实现通用的转换了,而不再需要每个都写 resultType="com.blinkfox.fenix.example.dto.BlogDto"
可能没有讲明白, 后面我试试提个pr
The text was updated successfully, but these errors were encountered: