Немного заводной магии помогает:
def filtered = ['property1', 'property2', ....]
sql.eachRow("select * from temp_table") {
def e = new MyJavaClass(it.properties.findAll{filtered.contains(it.key)})
}
Учитывая, что
- список
filtered
содержит все имена свойств, которые вы собираетесь копировать;
- имена столбцов вашей таблицы соответствуют
MyJavaClass
объявленным именам свойств (так же, как в списке filtered
);
MyJavaClass
имеет как конструктор по умолчанию (пустой), так и конструктор
который принимает все свойства в качестве параметров;
MyJavaClass
объявляет открытые сеттеры для свойств;
например:
public MyJavaClass() {}
public MyJavaClass(String property1, String property2, ....) {
this.property1 = property1;
this.property2 = property2;
.... }
public void setProperty1(String property1) {this.property1 = property1;}
public void setProperty2(String property2) {this.property2 = property2;}
....
Вы можете использовать filtered
в качестве списка нежелательных свойств, таких как:
def filtered = ['class', 'metaClass', ....]
, то:
def e = new MyJavaClass(it.properties.findAll{!filtered.contains(it.key)})