我正在尝试使用 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);
}
我正在使用参数进行编译,这就是为什么我没有明确命名参数的原因(这工作正常(。 由于@RegisterBeanMapper
,update
和upsert
方法按预期工作。 但是batchUpsert
没有,我得到:
java.lang.UnsupportedOperationException: 没有为类型类 com.foo.SomeBean 的"com.foo.SomeBean@49d11f58"注册参数工厂
有没有办法将 Bean 绑定为参数,作为列表的一部分,而无需编写自定义参数工厂? 令人沮丧的是,文档在这里含糊不清:
java.util.Collection 和 Java 数组(存储为 SQL 数组(。根据数组元素的类型,可能需要一些额外的设置。
不确定"一些额外的设置">需要什么。
我从来没有使用过这样的@BindList(用于批量操作(,我不知道它是否适合与豆子一起使用。
正如文档所说:
绑定值列表是通过@BindList注释完成的。这将在"a,b,c,d"中扩展列表,...'的形式。请注意,此注释要求您使用
表示法,这与 @Bind 不同(使用 :binding(
所以如果你有
@BindList List<Long> data
作为界面中的参数,您必须使用
select * from my_data where id in (<data>)
作为查询(注意括号而不是冒号(。我怀疑你根本不能把它和豆子一起使用!