фон
Я реализую как мягкую, так и жесткую функциональность в приложении JPA/Hibernate. Учитывая сущность с SQLRestriction, определяемой для ограничения каждого запроса в JPA, чтобы вернуть не DELEDED Данные:
@Entity
@SQLRestriction("deleted = false")
public class Product extends Auditables {
@Id
@SnowFlakeIdValue(name = "product_id")
@Column(name = "product_id", columnDefinition = "BIGINT", updatable = false, nullable = false)
@Column(name = "deleted", nullable = false)
private boolean deleted = false;
@Version
private Long version;
@OneToMany(mappedBy = "product", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private Set variants = new HashSet();
@OneToMany(mappedBy = "product", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private Set
images = new HashSet();
}
< /code>
Обратите внимание, что @sqlrestrics всегда применяются и не могут быть отключены. Также они не могут быть параметризованы. Поэтому они гораздо менее гибкие, чем фильтры. Мне нужно запрашивать и управлять как не удаленными, так и с мягкими отключенными записями в определенных случаях (например, для жесткой делеции), но @sqlrestriction всегда применяется и не может быть отключена или параметризована в соответствии с документацией Hibernate. Поле продукта соответствующего запроса.
Пробое подходы
Как я хотел иметь способность как с мягкой делетацией, так и с трудом делеал , я пробовал различные способы, все еще используя @sqlrestriction, один из них был:
, в то же время используя @sqlrestriction, один из них был:
@Repository
public interface ProductRepository extends JpaRepository {
@Query("SELECT p FROM Product p")
@SQLRestriction("")
List findAllUnfiltered();
@Modifying @Transactional
@Query("DELETE FROM Product p WHERE p.productId = :productId AND p.deleted IN (true, false)")
void deleteProductPermanently(@Param("productId") Long id);
@Modifying @Transactional
@Query("DELETE FROM Product p WHERE p.deleted IN (true, false)")
void deleteAllProductsPermanently();
}
< /code>
Ни одна из этих попыток успешно обходит @sqlrestriction. Если нет, то какой рекомендуемый подход? /> Структура пружинной загрузки: 3.3.4
hibernate (.orm, core): 6.5.3 final < /p>
Подробнее здесь: https://stackoverflow.com/questions/791 ... pa-queries