hibernate findbyid查询中的java奇怪行为

e5njpo68  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(226)

我有一个用例,其中hibernate的行为出乎意料。我的想法是,我有一个具有关联的实体(尽管有很多关联,有多对一和一对多链接),我想使用其中一个实体的主键执行findbyid查询。问题是结果实体没有一个相关的manytone实体(同样,最大的相关实体也是这样)。作为更多上下文,基本实体(用于findby查询的实体)也有几个“自由文本”字段,在mysql中Map为varchar(1000)。在这种情况下,奇怪的是:
这个问题只出现在一小部分表条目中。90%的人只检索到整个树而没有问题
获取hibernate生成的查询并在mysql中使用它将导致一个正确链接的对象(关联实体的id在这个join中被检索到),即使对于这个“有问题的”id->这样生成的sql也是正确的
所讨论的条目在2个varchar(1000)列中有一些较长的文本(一个是~300个字符,另一个是~500个字符)。如果我们将其中一个文本修剪为特定的字符长度,那么对这个id的查询也是成功的。进一步说,如果我们减少另一个“自由文本”字段的字符数,我们就可以在相同字符数的情况下增加第一个文本字段的字符数,检索仍然会成功。多输入一个字符,查询将无法检索相关实体。更进一步,优化一些关系(使一些“toone”关联变为惰性)将允许在不影响检索的情况下向“freetext”字段添加更多字符。
在这种情况下,最直接的解决方案可能是仔细地重新设计关联,以及每个查询检索多少树,但我对hibernate框架的这种行为更感兴趣。它是否对单个fetch查询可以返回或删除多少数据/对象有限制?如果是这样的话,限制是什么,可以调整吗?
使用的框架:Hibernate5.3.9、SpringData2.1.6、Java8、MySQL5.7数据库
谢谢您。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题