Java Hibernate findById查询中的奇怪行为

Java Hibernate findById查询中的奇怪行为,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我有一个用例,其中Hibernate的行为出乎意料。我的想法是,我有一个具有关联的实体(尽管有很多,有多对一和一对多链接),我想使用其中一个实体的主键执行findById查询。问题是结果实体没有一个关联的多个实体(同样,最大的关联实体也是如此)。作为更多上下文,基本实体(用于findBy查询的实体)也有两个“自由文本”字段,在mysql中映射为VARCHAR(1000)。在这种情况下,奇怪的是: 此问题仅在一小部分表条目中出现。90%的用户只需检索整个树,没有任何问题 获取hibernate生成

我有一个用例,其中Hibernate的行为出乎意料。我的想法是,我有一个具有关联的实体(尽管有很多,有多对一和一对多链接),我想使用其中一个实体的主键执行findById查询。问题是结果实体没有一个关联的多个实体(同样,最大的关联实体也是如此)。作为更多上下文,基本实体(用于findBy查询的实体)也有两个“自由文本”字段,在mysql中映射为VARCHAR(1000)。在这种情况下,奇怪的是:

  • 此问题仅在一小部分表条目中出现。90%的用户只需检索整个树,没有任何问题
  • 获取hibernate生成的查询并在mysql中使用它将导致一个正确链接的对象(关联实体的id在这个连接中被检索),即使对于这个“有问题的”id->,生成的SQL也是正确的
  • 该条目在2个VARCHAR(1000)列中有一些较长的文本(一个约300个字符,另一个约500个字符)。如果我们将其中一个文本修剪为特定的字符长度,则该id的查询也会成功。进一步说,如果我们减少另一个“自由文本”字段的字符数,我们可以使用相同的字符数增加第一个文本字段的字符数,检索仍然会成功。多输入一个字符,查询将无法检索相关实体。更进一步,优化一些关系(使一些“ToOne”关联变为惰性)将允许在不影响检索的情况下向“freetext”字段添加更多字符
  • 本例中的直接解决方案更可能是仔细地重新设计关联,以及每个查询检索到多少树,但我更好奇Hibernate框架的这种行为。它是否对单个获取查询可以返回或删除的数据/对象数量有限制?如果是这样的话,限制是什么,可以调整吗

    使用的框架:Hibernate 5.3.9、Spring data 2.1.6、Java 8、Mysql 5.7数据库


    谢谢。

    记录发送到数据库的sql语句可能有用。有关如何设置此日志记录,请参阅f.x。希望有帮助:)你好,卡吉。正如您在问题的“2”点中所看到的,主要是“获取hibernate生成的查询并在mysql中使用它将导致一个正确链接的对象(关联实体的id在此联接中检索),即使对于这个“有问题的”id也是如此”我自己在mysql查询中使用sql语句和绑定参数。很抱歉评论有点太快了!记录发送到数据库的sql语句可能很有用。有关如何设置此日志记录,请参阅f.x。希望有帮助:)你好,卡吉。正如您在问题的“2”点中所看到的,主要是“获取hibernate生成的查询并在mysql中使用它将导致一个正确链接的对象(关联实体的id在此联接中检索),即使对于这个“有问题的”id也是如此”我自己在mysql查询中使用sql语句和绑定参数。很抱歉评论有点太快了!