I have a table Stuff
defined as...
id, <fields>..., active
Active is the soft-delete flag and is always 1
or 0
. Long term this may go away in favor of a historical table.
public interface StuffRepository extends JpaRepository<StuffEntity, Long> {}
In code, we always use active records. Is there any way to get Spring to always append an active=1
condition to queries generated for this repository? Or more ideally allow me to extend the grammar used to generate the queries?
I understand that I can create named @queues
everywhere but then I lose the convenience of the generated queries. I also want to avoid polluting the interface with "active" methods.
I am using Hibernate 4.2 as my JPA implementation if that matters.
This is an old question, and you probably already found the answer. BUT, for all the Spring/JPA/Hibernate programmers out there seeking for answer -
Say you have an entity Dog:
@Entity
public class Dog{
......(fields)....
@Column(name="is_active")
private Boolean active;
}
and a repository:
public interface DogRepository extends JpaRepository<Dog, Integer> {
}
All you need to do is add the @Where annotation on the entity level, resulting:
@Entity
@Where(clause="is_active=1")
public class Dog{
......(fields)....
@Column(name="is_active")
private Boolean active;
}
All the queries performed by the repository will automatically filter out the "non-active" rows.