我有两个表,plan
和account
,我还有两个类Plan
和Account
,代表这些表。
Account
包含字段id
,plan_id
,vdn
和type
。 Plan
包含字段id
和其他一些不相关的字段。它的结构使得计划可以分配给多个帐户。
我的Plan
类有一个名为accounts
的字段,其映射如下:
@OneToMany(mappedBy = "plan", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@OrderBy(value = "type")
@LazyCollection(value = LazyCollectionOption.FALSE)
private List<Account> accounts;
因此,计划中包含与其关联的所有帐户的列表。我要做的是使用属于其相应帐户的vdns
过滤计划列表。
例如,如果一个计划属于vdn
“abc”的帐户而另一个计划属于vdn
“123”的帐户,则用户可以按字符串“ab”进行搜索“12”找到他们两个。
这是我到目前为止所做的:
criteria.createCriteria("accounts").add(Restrictions.in("vdn", new String[] { "abc", "123" }));
此代码有效,但它只与字符串完全匹配。如果用户输入“abc”,那么它将找到该计划。如果用户输入“ab”,则无法找到该计划。
到目前为止,我还尝试过类似的事情:
criteria.createCriteria("accounts").add(Restrictions.in("vdn", new String[] { "%ab%", "%12%" }));
但这没效果。
有没有办法使用“喜欢”限制和“在”限制?