foreach里面生成的SQL不能通过占位方式生成SQL而后赋值
johnnyhhj opened this issue · 3 comments
org.mvel2.PropertyAccessException: [Error: could not access: item; in class: java.util.HashMap]
[Near : {... item.id ....}]
^
[Line: 1, Column: 2]
at org.mvel2.PropertyAccessor.getBeanProperty(PropertyAccessor.java:679) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.PropertyAccessor.getNormal(PropertyAccessor.java:178) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.PropertyAccessor.get(PropertyAccessor.java:145) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.PropertyAccessor.get(PropertyAccessor.java:125) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.ast.ASTNode.getReducedValue(ASTNode.java:187) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:112) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:58) ~[mvel2-2.4.8.Final.jar:na]
at org.mvel2.MVEL.eval(MVEL.java:114) ~[mvel2-2.4.8.Final.jar:na]
at com.blinkfox.fenix.helper.ParseHelper.parseExpressWithException(ParseHelper.java:45) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.core.FenixXmlBuilder.renderSqlAndOtherParams(FenixXmlBuilder.java:159) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.core.FenixXmlBuilder.buildSqlInfo(FenixXmlBuilder.java:132) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.core.FenixXmlBuilder.buildNewSqlInfo(FenixXmlBuilder.java:103) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.core.FenixXmlBuilder.getXmlSqlInfo(FenixXmlBuilder.java:79) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.core.Fenix.getXmlSqlInfo(Fenix.java:104) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.jpa.FenixJpaQuery.getSqlInfoByFenix(FenixJpaQuery.java:295) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.jpa.FenixJpaQuery.doCreateQuery(FenixJpaQuery.java:128) ~[fenix-2.3.6.jar:na]
at com.blinkfox.fenix.jpa.FenixJpaQuery.doCreateQuery(FenixJpaQuery.java:110) ~[fenix-2.3.6.jar:na]
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:227) ~[spring-data-jpa-2.4.1.jar:2.4.1]
<fenix id="insertBlogs">
INSERT INTO test.t_blog (c_id, c_title, c_content)
VALUES
@foreach{item : blogs}
( #{ item.id }, #{ item.title }, #{ item.content } )
@end{','}
</fenix>
@Modifying
@QueryFenix(nativeQuery = true)
void insertBlogs(@Param("blogs") List<Blog> blogs);
Fenix 中的 #{}
是编译期间替换的,MVEL 模板引擎是识别不了 #{}
的,你把 #{}
换成 @{}
才行。但是,这样也不是占位符形式的。目前是暂时无法实现 @foreach
方式的占位符形式参数了,因为无法在 MVEL 运行期间去替换字符串数据。
JPA 的批量保存直接调用 saveAll
就行了吧,不需要使用这种 MyBatis
里面的原生写法。