I have the following entities. Entity Models:
@Entity
@Getter
@Setter
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String categoryId;
@BatchSize(size = 20)
@ManyToMany
private List<Tag> tags = new ArrayList<>();
}
@Entity
@Getter
@NoArgsConstructor
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String name;
public Tag (String name) {
this.name = name;
}
}
And DTO:
In Hibernate 5.6.14, when querying articles, it generated queries :
However In Hibernate 6.1.6:
Hibernate 6.1.6 generated queries 2 more and binded data in each query were article-id that had empty tag list. And the values in IN clause at the last query was always generated as much as the size of @BatchSize. Test Code:
I expected executing queries same in both version, it wasn't. reproducer: https://github.com/chlrbgh89/hibernate-batch-size-bug reproducer Hibernate version is 6.1.6.Final If you want to downgrade version to 5.6.14.Final, uncomment this code in build.gradle
Envrionment
- Spring Boot 3.0.1
- Hibernate 6.1.6.Final
|