Query for finding a domain by its root category

ccm-docs
Jens Pelzetter 2020-11-21 11:37:19 +01:00
parent 46bf425f96
commit 6986786f12
2 changed files with 51 additions and 18 deletions

View File

@ -82,21 +82,33 @@ import javax.validation.constraints.NotBlank;
@Entity @Entity
@Table(name = "CATEGORY_DOMAINS", schema = DB_SCHEMA) @Table(name = "CATEGORY_DOMAINS", schema = DB_SCHEMA)
@NamedQueries({ @NamedQueries({
@NamedQuery(name = "Domain.findByKey", @NamedQuery(
query = "SELECT d FROM Domain d WHERE d.domainKey = :key"), name = "Domain.findByKey",
@NamedQuery(name = "Domain.findByUri", query = "SELECT d FROM Domain d WHERE d.domainKey = :key"
query = "SELECT d FROM Domain d WHERE d.uri = :uri"), ),
@NamedQuery(name = "Domain.findByUuid", @NamedQuery(
query = "SELECT d FROM Domain d WHERE d.uuid = :uuid"), name = "Domain.findByUri",
@NamedQuery(name = "Domain.findAll", query = "SELECT d FROM Domain d WHERE d.uri = :uri"
query = "SELECT d FROM Domain d ORDER BY d.domainKey"), ),
@NamedQuery(
name = "Domain.findByUuid",
query = "SELECT d FROM Domain d WHERE d.uuid = :uuid"
),
@NamedQuery(
name = "Domain.findByRootCategory",
query = "SELECT d FROM Domain d WHERE d.root = :root"
),
@NamedQuery(
name = "Domain.findAll",
query = "SELECT d FROM Domain d ORDER BY d.domainKey"
),
@NamedQuery( @NamedQuery(
name = "Domain.search", name = "Domain.search",
query query
= "SELECT d FROM Domain d " = "SELECT d FROM Domain d "
+ "WHERE d.domainKey LIKE CONCAT (LOWER(:term), '%') " + "WHERE d.domainKey LIKE CONCAT (LOWER(:term), '%') "
+ "OR d.uri LIKE CONCAT (LOWER(:term), '%') " + "OR d.uri LIKE CONCAT (LOWER(:term), '%') "
+ "ORDER BY d.domainKey") + "ORDER BY d.domainKey")
}) })
@NamedEntityGraphs({ @NamedEntityGraphs({
@NamedEntityGraph( @NamedEntityGraph(

View File

@ -87,6 +87,7 @@ public class DomainRepository extends AbstractEntityRepository<Long, Domain> {
* @return The {@code Domain} identified by {@code domainKey} or * @return The {@code Domain} identified by {@code domainKey} or
* {@code null} if there is no such {@code Domain}. * {@code null} if there is no such {@code Domain}.
*/ */
@Transactional(Transactional.TxType.REQUIRED)
public Optional<Domain> findByDomainKey(final String domainKey) { public Optional<Domain> findByDomainKey(final String domainKey) {
final TypedQuery<Domain> query = getEntityManager() final TypedQuery<Domain> query = getEntityManager()
.createNamedQuery("Domain.findByKey", Domain.class); .createNamedQuery("Domain.findByKey", Domain.class);
@ -111,6 +112,7 @@ public class DomainRepository extends AbstractEntityRepository<Long, Domain> {
* @return The {@code Domain} identified by the provided URI or {@code null} * @return The {@code Domain} identified by the provided URI or {@code null}
* if there is so such {@code Domain}. * if there is so such {@code Domain}.
*/ */
@Transactional(Transactional.TxType.REQUIRED)
public Domain findByUri(final URI uri) { public Domain findByUri(final URI uri) {
final TypedQuery<Domain> query = getEntityManager() final TypedQuery<Domain> query = getEntityManager()
.createNamedQuery("Domain.findByUri", Domain.class); .createNamedQuery("Domain.findByUri", Domain.class);
@ -126,18 +128,37 @@ public class DomainRepository extends AbstractEntityRepository<Long, Domain> {
* *
* @return An optional either with the found item or empty * @return An optional either with the found item or empty
*/ */
@Transactional(Transactional.TxType.REQUIRED)
public Optional<Domain> findByUuid(final String uuid) { public Optional<Domain> findByUuid(final String uuid) {
final TypedQuery<Domain> query = getEntityManager()
.createNamedQuery("Domain.findByUuid", Domain.class);
query.setParameter("uuid", uuid);
try { try {
return Optional.of(query.getSingleResult()); return Optional.of(
getEntityManager()
.createNamedQuery("Domain.findByUuid", Domain.class)
.setParameter("uuid", uuid)
.getSingleResult()
);
} catch (NoResultException ex) { } catch (NoResultException ex) {
return Optional.empty(); return Optional.empty();
} }
} }
@Transactional(Transactional.TxType.REQUIRED)
public Optional<Domain> findByRootCategory(final Category rootCategory) {
try {
return Optional.of(
getEntityManager()
.createNamedQuery(
"Domain.findByRootCategory", Domain.class
)
.setParameter("root", rootCategory)
.getSingleResult()
);
} catch (NoResultException ex) {
return Optional.empty();
}
}
@Transactional(Transactional.TxType.REQUIRED)
public List<Domain> search(final String term) { public List<Domain> search(final String term) {
final TypedQuery<Domain> query = getEntityManager() final TypedQuery<Domain> query = getEntityManager()
.createNamedQuery("Domain.search", Domain.class); .createNamedQuery("Domain.search", Domain.class);