JPA Hibernate 为一个简单的更新查询创建临时表。

6

我在我的存储库中有一个简单的查询,用于根据帖子对象增加评论数量:

public interface PostsRepository extends PagingAndSortingRepository<Post, Long>{

//...

@Modifying
@Query("UPDATE Post p set p.numComments = p.numComments + 1 where p = :post")
void incrementNumComments(@Param("post") post obj);

//...
}

模型:

@Entity
@Table(name="posts")
@Inheritance(strategy= InheritanceType.JOINED)
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "post_id", updatable = false, nullable = false)
    @Access(AccessType.PROPERTY)
    private Long id;
}

然而,Hibernate似乎使用一个临时表来执行查询。以下是日志中生成的查询:

Hibernate: insert into HT_posts select pos0_.post_id as post_id from posts pos0_ where pos0_.s_id=?
Hibernate: update posts set num_comments=num_comments+1 where (post_id) IN (select post_id from HT_posts)

有没有办法防止Hibernate在此查询中使用临时表?
谢谢。

2
我认为原因在于注解@Inheritance(strategy= InheritanceType.JOINED) - Giovanni
@Giovanni 我也怀疑是这个问题,但如果注释是罪魁祸首,我不确定该如何纠正。 - Dyip302
1个回答

7
你可以在这里找到有关多表批量操作的详细信息。
正如@Giovanni所提到的,这是由于使用了InheritanceType.JOINED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接