在DB结果中查找的最佳方法是只提供字符串,该字符串可以包含随机顺序名称,姓氏,描述,电话,ID
我还想确保查询参数的所有值都用于任何选定的行。
示例:
public void SetReadOnly(bool readOnly)
{
foreach (TabPage tab in tabControl.TabPages)
{
foreach (Control c in tab.Controls)
{
if (c is TextBox)
{
((TextBox)c).ReadOnly = readOnly;
}
else
{
// All controls support this property
c.Enabled = !readOnly;
}
}
}
}
查询 - >结果:
+--------+---------+-------------+----------+-----+
| Name | Surname | Description | Phone | Id |
+--------+---------+-------------+----------+-----+
| John | Doe | Tall | 12345678 | 123 |
| Taylor | Doe | Short | 45678913 | 234 |
| Taylor | Joe | Short | 45678913 | 345 |
+--------+---------+-------------+----------+-----+
- > John Doe和Taylor Joe Jo
- > John Doe,Taylor Doe和Taylor Joe Ta Do
- > Taylor Doe Taylor 234
- > John Doe和Taylor Doe Doe 23
- >约翰·多伊Doe 123
- > 我需要在HQL中进行查询,但我相信任何关系数据库语言的解决方案都会对我有所帮助。
@edit如果你投票,请评论为什么(坏标签?没有可能的解决方案?)
答案 0 :(得分:2)
解决方案很简单,因为它不令人满意。使用像这样的where子句创建一个查询
WHERE (columnA like '%value1%'
OR columnB '%value1%')
AND (columnA '%value2%'
OR columnB '%value2%')
AND (...
) ...
包含您要搜索的所有列组合以及您拥有的值。
使用Spring Data,您可能希望使用Specification
来执行此操作。您可以创建一个方法,通过获取查询字符串,将其分割为空格并迭代结果,创建与上述查询条件等效的Specification
。
请注意,这将非常慢,因为它无法使用任何正常索引。
但实际上你正在使用错误的工具来完成工作。如果这是您需要实施的事情之一,那就没关系。一个更好的工具是像Lucene这样的搜索引擎,或者可能是text search features in your database。要将其与JPA集成,请参阅How to use MySQL's full text search from JPA。
如果你考虑一个完整的搜索引擎,你可以考虑Spring Data Elastic Search