2016-11-25 2 views
1

У меня есть простой запрос в моем хранилище, чтобы увеличить число комментариев на пост данного пост объекта:JPA Hibernate создает временные таблицы для простого запроса на обновление

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 с использованием временных таблиц для этого запроса?

Благодаря

+1

Я думаю, что причина в аннотации '@Inheritance (strategy = InheritanceType.JOINED)' – Giovanni

+0

@Giovanni Я тоже подозревал, что, но я не уверен, как исправить, если аннотация является виновником. – Dyip302

ответ

2

Вы можете найти подробную информацию о Multitable bulk operations.

Как @Giovanni упомянутый, это из-за использования InheritanceType.JOINED.

+0

Благодарим вас за статью. это было интересное чтиво. – Dyip302

Смежные вопросы