Postgres
@DbArray
的主要目标数据库是 Postgres,作为单维数组。随着时间的推移,我们还可以将其映射到 Oracle 嵌套表,但在此阶段,这将按需完成(您可以询问并赞助开发工作等)。
回退
对于非 Postgres,回退是简单地将数据存储在 VARCHAR 中的 JSON 形式(例如 @DbJson)。
示例:uuid[]
@DbArray
List<UUID> uids = new ArrayList<UUID>();
上面的示例将映射到数据库列类型 uuid[]
。
示例:integer[]
@DbArray
List<Long> someIds = new ArrayList<Long>();
上面的示例将映射到数据库列类型 integer[]
。
示例:varchar[]
@DbArray
List<String> phoneNumbers = new ArrayList<String>();
上面的示例将映射到数据库列类型 varchar[]
。
回退 varchar 长度
length
属性与非 Postgres 数据库一起使用,并定义在回退情况下使用的 varchar 列的大小。
// fallback to varchar(300) for non-Postgres databases
@DbArray(length = 300)
List<String> phNums = new ArrayList<String>();
表达式
Ebean “查询 Bean” 和 ExpressionList 添加了 4 个表达式来处理我们想要执行的常见 ARRAY 表达式。
以下示例使用映射到 varchar 数组的 phNums
属性。
contains()
List<Contact> contacts = Contact.find
.where()
.phNums.contains("2314")
.findList();
contains() 使用 @>
contains 运算符,并产生以下谓词
where t0.ph_nums @> array[?]; --bind(2314)
notContains()
List<Contact> contacts = Contact.find
.where()
.phNums.notContains("2314")
.findList();
notContains() 使用 @>
contains 运算符,并产生以下谓词
where not (t0.ph_nums @> array[?]); --bind(2314)
isEmpty()
List<Contact> contacts = Contact.find
.where()
.phNums.isEmpty()
.findList();
isEmpty() 使用基数函数,并产生以下谓词
where coalesce(cardinality(t0.ph_nums),0) = 0
isNotEmpty()
List<Contact> contacts = Contact.find
.where()
.phNums.isNotEmpty()
.findList();
isNotEmpty() 使用基数函数,并产生以下谓词
where coalesce(cardinality(t0.ph_nums),0) <> 0