Я использую 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'
)
Заранее спасибо, любая идея будет приветствоваться.