- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如标题所示,在特定情况下尝试将JPA Criteria
与Spring Boot
一起使用时遇到问题。
通常,一切正常,但是尝试使用嵌入了String
(newLine character
)的\n
属性搜索存储的数据似乎无效。
我能够Get
数据,编辑它们,通过前端保存它们,用多行创建新内容等。但是尝试在例如'hello\nworld'
等于列的情况下搜索它们,即使运行MySQL Workbench中的此查询可返回所需数据:select * from kerkinidb.ct_thhlastika_press_threats where description_en = 'hello\nworld';
为了明确起见,我执行搜索的方法是等待Get
请求一个名为search
的参数,该参数具有用户过滤的所有属性。我将其与Regex
匹配(在Java 8.0 new Regex \\\\R
内也可与multilines
匹配(并且有效)),然后将Service layer
赋予我匹配的Search Criteria
,然后传递给Jpa Criteria Repository
来解析它们,然后generating the Predicates
(再次与Regex and \\\\R
匹配以创建最终的Predicate with OR and ANDs
进行过滤),然后是triggering the query
,然后使another query called count
实施Pagination
,最后是mapping
自定义对象并返回它。
我调试了每个步骤,最终的谓词确实生成了我想要的查询,但是数据库未返回预期的数据。所以我真的很困惑,因为正如我所说的,查询确实在MySQL Workbench
中起作用。
这是触发请求时生成日志记录的示例(我打开了MySQL logs
的Spring Boot日志)(在这种情况下,我在Table ct_thhlastika_press_threats
中的column description_en
中存储的数据是a\ns\ndd
),所以我如您所见,我正在搜索此内容,而不是我之前hello\nworld
所说的示例:
2019-02-12 16:01:01.929 DEBUG 18368 --- [nio-8080-exec-2] org.hibernate.SQL : select ctthhlasti0_.id as col_0_0_, ctthhlasti0_.act_code as col_1_0_, ctthhlasti0_.description_en as col_2_0_, ctthhlasti0_.remarks as col_3_0_ from ct_thhlastika_press_threats ctthhlasti0_ where 1=1 and ctthhlasti0_.description_en=? order by ctthhlasti0_.id asc limit ?
2019-02-12 16:01:01.933 TRACE 18368 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [a\ns\ndd]
2019-02-12 16:01:01.944 DEBUG 18368 --- [nio-8080-exec-2] org.hibernate.SQL : select count(ctthhlasti0_.id) as col_0_0_ from ct_thhlastika_press_threats ctthhlasti0_ where 1=1 and ctthhlasti0_.description_en=?
2019-02-12 16:01:01.944 TRACE 18368 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [a\ns\ndd]
2019-02-12 16:01:01.946 TRACE 18368 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicExtractor : extracted value ([col_0_0_] : [BIGINT]) - [0]
System.lineSeparator()
(如下面的答案中
@Hermann Steidel
所示)替换文本newLine
\n
。但是,即使在日志中我们现在可以清楚地看到equals谓词的值具有行分隔符,但它仍然不会从数据库返回数据。
http://localhost:8080/v1/ctThhlastikaPressThreats/search?search=descriptionEn~hello\nworld;@&size=10&page=0&sort=Asc
search
的路径变量(具有用户请求的所有属性过滤功能),以及
size
,
page
和
sort
的另外3个。
search
变量,我使用3个不同的字符来为最终查询实现OR和AND谓词。这些是
~
,它要知道该属性需要使用相等的谓词,该
;
应当能够为用户请求的每个属性具有多个值,最后是
@
此属性的过滤结束。
Regexed
。在
Controller
和
SearchRepository
中(例如,由于我们专门从此开始->
CtThhlastasikaPressThreats
)
Controller
设置为
(\w+?)(~|<|>)([(!-/.\\\\R 0-9\p{L});]+)?@
,将
SearchRepository
设置为
([(!-/.\\\\R 0-9\p{L})]+)
。
descriptionEn
的列
hello\nworld
或例如您输入的任何值(也将其更改为请求)。
search
(位于第61行之后)的CtThhlastikaPressThreatsSearchRepository中,将其放在上方:
predicate = builder.equal(root.get(param.getKey()), match.toString());
match = match.toString().replace("\\n", System.lineSeparator());
predicate = builder.equal(root.get(param.getKey()), match.toString());
hellow\nworld
更改为
hello\r\nworld
,所以我想它仍然不是理想的解决方案。认为在db中将它存储为lineSeparators的
\n
。
descriptionEn
的VARCHAR值的确已经带有换行符,而不是
\n
(MySQL仍应识别)文本。
select * from kerkinidb.ct_thhlastika_press_threats where description_en = 'hello\nworld';
newLine char
或
lineSeparators
时,两者之间的某些内容可能会破坏请求。
最佳答案
我知道了。可能不是您想要的答案,但是,如果用系统行分隔符替换传入的“ \ n”,它将得到您想要的答案。
search = search.replace("\\n", System.getProperty("line.separator"));
try {
return ctThhlastikaPressThreatsService.searchCtThhlastikaPressThreats(producedSearchCriterias(search), size, page, sort);
extracted value ([col_2_0_] : [VARCHAR]) - [hello
world]
extracted value ([col_2_0_] : [VARCHAR]) - [hello\nworld]
关于mysql - 当在MySQL Workbench中工作时,Jpa Criteria等于表的String属性的谓词(带有newLine字符'\n')不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652202/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!