我正在尝试使用SqlObject API在Postgres中存储Bean POJO的列表。我的界面如下:
@UseClasspathSqlLocator
@RegisterBeanMapper(SomeBean.class)
public interface LeadStateDao {
@SqlUpdate
@GetGeneratedKeys
SomeBean update(@BindBean SomeBean bean);
@SqlUpdate
@GetGeneratedKeys
SomeBean upsert(@BindBean SomeBean bean);
@SqlUpdate
@GetGeneratedKeys
int[] batchUpsert(@BindList List<SomeBean> beans);
}
我正在使用参数进行编译,这就是为什么我没有显式命名参数的原因(这很好用)。 update
使upsert
和@RegisterBeanMapper
方法按预期工作。但是batchUpsert
却没有,我得到了:
java.lang.UnsupportedOperationException :没有为类型为com.foo.SomeBean类型的'com.foo.SomeBean@49d11f58'注册任何参数工厂
有没有一种方法可以将bean作为参数绑定为列表的一部分,而不必编写自定义参数工厂? The docs在这里令人感到沮丧:
java.util.Collection和Java数组(存储为SQL数组)。根据数组元素的类型,可能需要一些其他设置。
不确定什么“一些其他设置” 。
答案 0 :(得分:1)
我从来没有这样使用@BindList(用于批量操作),我也不知道它是否可以与bean一起使用。
the docs说:
通过@BindList批注完成绑定值列表。这将以'a,b,c,d,...'形式扩展列表。请注意,与@Bind(使用:binding)
不同,此注释要求您使用表示法。
如果有的话
@BindList List<Long> data
作为界面中的参数,您将不得不使用
select * from my_data where id in (<data>)
作为查询(请注意括号而不是冒号)。我怀疑您是否可以将其完全与豆一起使用!