Мягкое удаление в спящем режиме не использует предложение @Where - PullRequest
1 голос
/ 16 марта 2012

Я использую hibernate в проекте Java / Spring / Struts2 с мягким удалением. У меня есть отношения двух сущностей, и я ожидал, что при загрузке первой сущности из БД, если соответствующая удаляется, она не будет загружена.

Аннотация Первой сущности:

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "users")
@SQLDelete(sql = "UPDATE users SET active = '0' WHERE id_user = ?")
@Where(clause = "active = '1'")
public class User {

Это сопоставленное отношение

@Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
@ManyToOne
@JoinColumn(name = "id_social_data")
@Where(clause = "active = '1'")
public SocialData getSocialData() {
    return socialData;
}

и отображение второй сущности

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "social_datas")
@SQLDelete(sql = "UPDATE social_datas SET active = '0' WHERE id_social_data = ?")
@Where(clause = "active = '1'")
public class SocialData

Я включил журнал запросов гибернации и получил это

 select
    this_.id_user as id1_24_8_,
    this_.active as active24_8_,
.....
    socialdata5_.id_social_data as id1_18_3_,
    socialdata5_.active as active18_3_,
    .....
from
    users this_ 
    .....

left outer join
    social_datas socialdata5_ 
        on this_.id_social_data=socialdata5_.id_social_data 
    .....

where
    (
        this_.active = '1'
    ) 
    and this_.username=? 
    and this_.password=?

Я ошибаюсь, ожидая еще одного предложения "где"? Почему Hibernate не использует

where
    (
        this_.active = '1'
        and socialdata5_.active = '1'
    ) 

Заранее спасибо, любая идея будет приветствоваться.

1 Ответ

1 голос
/ 24 мая 2017

В hibernate bug tracker обнаружена ошибка / функция, выпущенная в 2007 году:

https://hibernate.atlassian.net/browse/HHH-2737

https://hibernate.atlassian.net/browse/HHH-4335

@ Где отлично работает с @OneToMany, но не работает с @ ManyToOne.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...