From 7ca750b658d95b437e6131a210ecbab0282faf0b Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 21 Nov 2020 11:37:19 +0100 Subject: [PATCH] Query for finding a domain by its root category Former-commit-id: 54a2dcffdcc5cee89bc5def07ec7413127c8d05e --- .../org/libreccm/categorization/Domain.java | 36 ++++++++++++------- .../categorization/DomainRepository.java | 33 +++++++++++++---- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/categorization/Domain.java b/ccm-core/src/main/java/org/libreccm/categorization/Domain.java index be258a0ad..505408780 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/Domain.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/Domain.java @@ -82,21 +82,33 @@ import javax.validation.constraints.NotBlank; @Entity @Table(name = "CATEGORY_DOMAINS", schema = DB_SCHEMA) @NamedQueries({ - @NamedQuery(name = "Domain.findByKey", - query = "SELECT d FROM Domain d WHERE d.domainKey = :key"), - @NamedQuery(name = "Domain.findByUri", - query = "SELECT d FROM Domain d WHERE d.uri = :uri"), - @NamedQuery(name = "Domain.findByUuid", - query = "SELECT d FROM Domain d WHERE d.uuid = :uuid"), - @NamedQuery(name = "Domain.findAll", - query = "SELECT d FROM Domain d ORDER BY d.domainKey"), + @NamedQuery( + name = "Domain.findByKey", + query = "SELECT d FROM Domain d WHERE d.domainKey = :key" + ), + @NamedQuery( + name = "Domain.findByUri", + query = "SELECT d FROM Domain d WHERE d.uri = :uri" + ), + @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( name = "Domain.search", query - = "SELECT d FROM Domain d " - + "WHERE d.domainKey LIKE CONCAT (LOWER(:term), '%') " - + "OR d.uri LIKE CONCAT (LOWER(:term), '%') " - + "ORDER BY d.domainKey") + = "SELECT d FROM Domain d " + + "WHERE d.domainKey LIKE CONCAT (LOWER(:term), '%') " + + "OR d.uri LIKE CONCAT (LOWER(:term), '%') " + + "ORDER BY d.domainKey") }) @NamedEntityGraphs({ @NamedEntityGraph( diff --git a/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java b/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java index 17681c952..caff64b7e 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/DomainRepository.java @@ -55,7 +55,7 @@ public class DomainRepository extends AbstractEntityRepository { public String getIdAttributeName() { return "objectId"; } - + @Override public Long getIdOfEntity(final Domain entity) { return entity.getObjectId(); @@ -87,6 +87,7 @@ public class DomainRepository extends AbstractEntityRepository { * @return The {@code Domain} identified by {@code domainKey} or * {@code null} if there is no such {@code Domain}. */ + @Transactional(Transactional.TxType.REQUIRED) public Optional findByDomainKey(final String domainKey) { final TypedQuery query = getEntityManager() .createNamedQuery("Domain.findByKey", Domain.class); @@ -111,6 +112,7 @@ public class DomainRepository extends AbstractEntityRepository { * @return The {@code Domain} identified by the provided URI or {@code null} * if there is so such {@code Domain}. */ + @Transactional(Transactional.TxType.REQUIRED) public Domain findByUri(final URI uri) { final TypedQuery query = getEntityManager() .createNamedQuery("Domain.findByUri", Domain.class); @@ -126,18 +128,37 @@ public class DomainRepository extends AbstractEntityRepository { * * @return An optional either with the found item or empty */ + @Transactional(Transactional.TxType.REQUIRED) public Optional findByUuid(final String uuid) { - final TypedQuery query = getEntityManager() - .createNamedQuery("Domain.findByUuid", Domain.class); - query.setParameter("uuid", uuid); - try { - return Optional.of(query.getSingleResult()); + return Optional.of( + getEntityManager() + .createNamedQuery("Domain.findByUuid", Domain.class) + .setParameter("uuid", uuid) + .getSingleResult() + ); } catch (NoResultException ex) { return Optional.empty(); } } + @Transactional(Transactional.TxType.REQUIRED) + public Optional 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 search(final String term) { final TypedQuery query = getEntityManager() .createNamedQuery("Domain.search", Domain.class);