我试图使用SqlObject API在Postgres中存储Bean的列表。我的界面看起来如下:
@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绑定为参数,作为列表的一部分,而不必编写自定义参数工厂?医生们在这里非常模糊:
java.util.Collection和Java数组(存储为SQL数组)。根据数组元素的类型,可能需要一些额外的设置。
不确定“一些附加设置”意味着什么。
发布于 2019-07-18 06:27:34
我从未像这样使用@BindList (用于批量操作),也不知道它是否适合与bean一起使用。
正如医生们所说:
绑定值列表是通过@BindList注释完成的。这将以'a,b,c,d,…‘的形式展开列表。注意,这个注释要求您使用表示法,不像@Bind (它使用:binding)
所以如果你有
@BindList List<Long> data
作为接口中的参数,您必须使用
select * from my_data where id in (<data>)
作为查询(注意括号而不是冒号)。我怀疑你根本不能用它来搭配豆子!
https://stackoverflow.com/questions/57065208
复制相似问题