我正在尝试通过SQL调用加载一组对象。 SQL查询返回的属性多于所需的属性。除了纠正SQL查询。在声明产品时,如何忽略所有无关的参数?
import groovy.sql.Sql
class Product {
Integer id;
Integer type;
String unique;
}
def var = [];
sql = Sql.newInstance("jdbc:jtds:sqlserver://localhost/[DB]", "user", "password","net.sourceforge.jtds.jdbc.Driver");
sql.eachRow("select * from Products", { var << new Product(it.toRowResult()) } );
我得到了例外:
groovy.lang.MissingPropertyException: No such property: [other fields from the SQL result]
答案 0 :(得分:1)
默认的Groovy行为是每当您尝试将值设置为bean中不存在的属性时抛出groovy.lang.MissingPropertyException
。我不太确定你是否可以改变这种行为。但是,您可以编写一个帮助方法来过滤掉不存在的属性。
def filterResult(bean, row) {
def filteredProps = [:]
row.each { key, value ->
if(bean.metaClass.properties.find { prop -> prop.name == key }) {
filteredProps.put(key, value)
}
}
filteredProps
}
def var = []
sql.eachRow("select * from Products", {
var << new Product(filterResult(Product, it.toRowResult()))
})