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", @NamedQuery(name = "CcmObject.findById",
query = "SELECT o FROM CcmObject o WHERE o.objectId = :id"), query = "SELECT o FROM CcmObject o WHERE o.objectId = :id"),
@NamedQuery(name = "CcmObject.findByUuid", @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) @XmlRootElement(name = "ccm-object", namespace = CORE_XML_NS)
//False warning (?). Because this class has been migrated from the old PDL style //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 @Override
public Object resolveId(final ObjectIdGenerator.IdKey id) { public Object resolveId(final ObjectIdGenerator.IdKey id) {
try { try {
return CdiUtil return CdiUtil
.createCdiUtil() .createCdiUtil()
.findBean(CcmObjectRepository.class) .findBean(CcmObjectRepository.class)
.findObjectByUuid(id.key.toString()) .findFirstObjectByUuid(id.key.toString())
.orElseThrow( .orElseThrow(
() -> new IllegalArgumentException( () -> new IllegalArgumentException(
String.format( String.format(
"No CcmObject with UUID %s in the database.", "No CcmObject with UUID %s in the database.",
id.key.toString() id.key.toString()
)
) )
) );
); } catch (NonUniqueResultException ex) {
} catch(NonUniqueResultException ex) {
throw new UnexpectedErrorException( throw new UnexpectedErrorException(
String.format( String.format(
"Found more than one result for UUID %s.", "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 static org.libreccm.core.CoreConstants.ACCESS_DENIED;
import java.util.List;
/** /**
* A repository class for {@link CcmObject} entities. * A repository class for {@link CcmObject} entities.
@ -45,17 +46,17 @@ import static org.libreccm.core.CoreConstants.ACCESS_DENIED;
public class CcmObjectRepository extends AbstractEntityRepository<Long, CcmObject> { public class CcmObjectRepository extends AbstractEntityRepository<Long, CcmObject> {
private static final long serialVersionUID = 5033157795875521195L; private static final long serialVersionUID = 5033157795875521195L;
@Override @Override
public Class<CcmObject> getEntityClass() { public Class<CcmObject> getEntityClass() {
return CcmObject.class; return CcmObject.class;
} }
@Override @Override
public String getIdAttributeName() { public String getIdAttributeName() {
return "objectId"; return "objectId";
} }
@Override @Override
public Long getIdOfEntity(final CcmObject entity) { public Long getIdOfEntity(final CcmObject entity) {
return entity.getObjectId(); return entity.getObjectId();
@ -98,7 +99,7 @@ public class CcmObjectRepository extends AbstractEntityRepository<Long, CcmObjec
return Optional.empty(); return Optional.empty();
} }
} }
/** /**
* Finds a {@link CcmObject} by its uuid. * Finds a {@link CcmObject} by its uuid.
* *
@ -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) @Transactional(Transactional.TxType.REQUIRED)
@Override @Override
public void delete(final CcmObject object) { public void delete(final CcmObject object) {