处理比所需更多的属性

时间:2011-07-26 21:41:57

标签: java sql groovy properties

我正在尝试通过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]

1 个答案:

答案 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())) 
})