srodrigues (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5e1d924...
) *created* an issue
Hibernate ORM (
https://hibernate.atlassian.net/browse/HHH?atlOrigin=eyJpIjoiZDBkZjQ2NGQ1...
) / Bug (
https://hibernate.atlassian.net/browse/HHH-16392?atlOrigin=eyJpIjoiZDBkZj...
) HHH-16392 (
https://hibernate.atlassian.net/browse/HHH-16392?atlOrigin=eyJpIjoiZDBkZj...
) @Where(clause = "deleted = false" ) generate bad query with entity name
instead of alias (
https://hibernate.atlassian.net/browse/HHH-16392?atlOrigin=eyJpIjoiZDBkZj...
)
Issue Type: Bug Affects Versions: 6.1.7 Assignee: Unassigned Components: hibernate-core
Created: 29/Mar/2023 00:10 AM Environment: Spring Boot 3.0.2 Spring Cloud 2022.0.1 and
spring-boot-starter-data-jpa hibernate-core 6.1.7 Priority: Major Reporter: srodrigues (
https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5e1d924...
)
Hi i wrote a user role entities with @ManyToMany with soft delete like this:
@Entity
@Audited(targetAuditMode = NOT_AUDITED)
@Table(name = "users")
@Where(clause = "deleted = false")
@SQLDelete(sql = "UPDATE users SET deleted = true WHERE id = ? and version =
?")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class UserEntity extends BaseEntity
{ @Column(length = 100) @NotNull @NotEmpty private String firstName; @Column(length = 100)
@NotNull @NotEmpty private String lastName; @Column(length = 100,unique=true) @NotNull
@NotEmpty private String email; @Column(length = 100) @NotNull @NotEmpty private String
password; @Builder.Default private boolean enabled = false; @Builder.Default private
boolean changePassword = true; private boolean tokenExpired; @ManyToMany(fetch =
FetchType.EAGER) @JoinTable( name = "users_roles", joinColumns = @JoinColumn(
name = "user_id", referencedColumnName = "id"), inverseJoinColumns =
@JoinColumn( name = "role_id", referencedColumnName = "id")) private
Collection<RoleEntity> roles; }
@Entity
@Table(name = "role")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class RoleEntity extends BaseEntity
{ @NotNull @NotEmpty @Column(length=25,unique=true) private String name;
@ManyToMany(mappedBy = "roles") private Collection<UserEntity> users; }
All works until i try to hard delete a user (i want to keep soft delete for some times
5years and hard delete for RGPD purpose).
@Transactional
@Modifying
@Query("delete from UserEntity where id =?1")
void deleteRgpd(Long id);
Hibernate try to generate a query to delete user_roles in cascade and the query is:
delete from users_roles where users_roles.user_id in(select u1_0.id from users u1_0 where
u1_0.id=? and ( *users*.deleted = false))
JPA put "users.deleted" instead of "u1_0.deleted"
I also try with query:
EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();
em.flush();
em.clear();
Query deleteUser = em.createQuery("DELETE FROM UserEntity WHERE id = :id");
deleteUser.setParameter("id", user.getId());
deleteUser.executeUpdate();
em.getTransaction().commit();
em.close();
Same issue
For information the select for user with roles:
select
r1_0.user_id,r1_1.id,r1_1.created_by,r1_1.created_date,r1_1.deleted,r1_1.last_modified_by,r1_1.last_modified_date,r1_1.name,r1_1.version
from users_roles r1_0 join role r1_1 on r1_1.id=r1_0.role_id where r1_0.user_id=? and (
r1_1.deleted= false)
is ok
(
https://hibernate.atlassian.net/browse/HHH-16392#add-comment?atlOrigin=ey...
) Add Comment (
https://hibernate.atlassian.net/browse/HHH-16392#add-comment?atlOrigin=ey...
)
Get Jira notifications on your phone! Download the Jira Cloud app for Android (
https://play.google.com/store/apps/details?id=com.atlassian.android.jira....
) or iOS (
https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=Em...
) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100219- sha1:6a6077b )