DS-4316 Support querying MetadataValues by field and value

This commit is contained in:
Andrew Wood
2019-08-01 08:56:10 -04:00
parent fc31a0cbe3
commit f9886529f5
4 changed files with 32 additions and 0 deletions

View File

@@ -71,6 +71,12 @@ public class MetadataValueServiceImpl implements MetadataValueService {
return metadataValueDAO.findByField(context, metadataField);
}
@Override
public Iterator<MetadataValue> findByFieldAndValue(Context context, MetadataField metadataField, String value)
throws SQLException {
return metadataValueDAO.findByFieldAndValue(context, metadataField, value);
}
@Override
public void update(Context context, MetadataValue metadataValue) throws SQLException {
metadataValueDAO.save(context, metadataValue);

View File

@@ -28,6 +28,9 @@ public interface MetadataValueDAO extends GenericDAO<MetadataValue> {
public List<MetadataValue> findByField(Context context, MetadataField fieldId) throws SQLException;
public Iterator<MetadataValue> findByFieldAndValue(Context context, MetadataField metadataField, String value)
throws SQLException;
public Iterator<MetadataValue> findByValueLike(Context context, String value) throws SQLException;
public void deleteByMetadataField(Context context, MetadataField metadataField) throws SQLException;

View File

@@ -49,6 +49,17 @@ public class MetadataValueDAOImpl extends AbstractHibernateDAO<MetadataValue> im
return list(context, criteriaQuery, false, MetadataValue.class, -1, -1);
}
@Override
public Iterator<MetadataValue> findByFieldAndValue(Context context, MetadataField metadataField, String value)
throws SQLException {
String queryString = "SELECT m from MetadataValue m where metadata_field_id = :metadata_field_id " +
"and text_value = :text_value ";
Query query = createQuery(context, queryString);
query.setParameter("metadata_field_id", metadataField.getID());
query.setParameter("text_value", value);
return iterate(query);
}
@Override
public Iterator<MetadataValue> findByValueLike(Context context, String value) throws SQLException {
String queryString = "SELECT m FROM MetadataValue m JOIN m.metadataField f " +

View File

@@ -63,6 +63,18 @@ public interface MetadataValueService {
public List<MetadataValue> findByField(Context context, MetadataField metadataField)
throws IOException, SQLException;
/**
* Retrieves matching MetadataValues for a given field and value.
*
* @param context dspace context
* @param metadataField The field that must match
* @param value The value that must match
* @return the matching MetadataValues
* @throws SQLException if database error
*/
public Iterator<MetadataValue> findByFieldAndValue(Context context, MetadataField metadataField, String value)
throws SQLException;
/**
* Update the metadata value in the database.
*