Additional query method

deploy_packages_to_gitea
Jens Pelzetter 2022-12-24 14:11:18 +01:00
parent 2cfbfc80ea
commit 56cdbaa03b
3 changed files with 40 additions and 17 deletions

View File

@ -83,7 +83,9 @@ import javax.persistence.Table;
@NamedQuery(name = "CcmObject.findById",
query = "SELECT o FROM CcmObject o WHERE o.objectId = :id"),
@NamedQuery(name = "CcmObject.findByUuid",
query = "SELECT o FROM CcmObject o WHERE o.uuid = :uuid")
query = "SELECT o FROM CcmObject o WHERE o.uuid = :uuid"),
@NamedQuery(name = "CcmObject.findFirstByUuid",
query = "SELECT o FROM CcmObject o WHERE o.uuid = :uuid ORDER BY objectId")
})
@XmlRootElement(name = "ccm-object", namespace = CORE_XML_NS)
//False warning (?). Because this class has been migrated from the old PDL style

View File

@ -53,19 +53,19 @@ public class CcmObjectIdResolver implements Serializable, ObjectIdResolver {
@Override
public Object resolveId(final ObjectIdGenerator.IdKey id) {
try {
return CdiUtil
.createCdiUtil()
.findBean(CcmObjectRepository.class)
.findObjectByUuid(id.key.toString())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No CcmObject with UUID %s in the database.",
id.key.toString()
return CdiUtil
.createCdiUtil()
.findBean(CcmObjectRepository.class)
.findFirstObjectByUuid(id.key.toString())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No CcmObject with UUID %s in the database.",
id.key.toString()
)
)
)
);
} catch(NonUniqueResultException ex) {
);
} catch (NonUniqueResultException ex) {
throw new UnexpectedErrorException(
String.format(
"Found more than one result for UUID %s.",

View File

@ -28,6 +28,7 @@ import java.util.UUID;
import static org.libreccm.core.CoreConstants.ACCESS_DENIED;
import java.util.List;
/**
* A repository class for {@link CcmObject} entities.
@ -118,6 +119,26 @@ public class CcmObjectRepository extends AbstractEntityRepository<Long, CcmObjec
}
}
/**
* Finds a {@link CcmObject} by its uuid.
*
* @param uuid The uuid of the item to find
*
* @return An optional either with the found item or empty
*/
public Optional<CcmObject> findFirstObjectByUuid(final String uuid) {
final TypedQuery<CcmObject> query = getEntityManager().createNamedQuery(
"CcmObject.findFirstByUuid", CcmObject.class);
query.setParameter("uuid", uuid);
final List<CcmObject> result = query.getResultList();
if (result.isEmpty()) {
return Optional.empty();
} else {
return Optional.of(result.get(0));
}
}
@Transactional(Transactional.TxType.REQUIRED)
@Override
public void delete(final CcmObject object) {