Make sure that the metadata of an eperson is fetched from the database together with the eperson.

This commit is contained in:
Tom Desair
2016-04-06 15:15:19 +02:00
committed by dylan
parent 0387a6f415
commit c1b3c6aed7

View File

@@ -41,25 +41,38 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public EPerson findByEmail(Context context, String email) throws SQLException public EPerson findByEmail(Context context, String email) throws SQLException
{ {
// All email addresses are stored as lowercase, so ensure that the email address is lowercased for the lookup Query query = createQuery(context,
Criteria criteria = createCriteria(context, EPerson.class); "SELECT p " +
criteria.add(Restrictions.eq("email", email.toLowerCase())); "FROM EPerson p " +
return uniqueResult(criteria); "LEFT JOIN FETCH p.metadata " +
"WHERE p.email = :email" );
query.setParameter("email", email.toLowerCase());
return uniqueResult(query);
} }
@Override @Override
public EPerson findByNetid(Context context, String netid) throws SQLException public EPerson findByNetid(Context context, String netid) throws SQLException
{ {
Criteria criteria = createCriteria(context, EPerson.class); Query query = createQuery(context,
criteria.add(Restrictions.eq("netid", netid)); "SELECT p " +
return uniqueResult(criteria); "FROM EPerson p " +
"LEFT JOIN FETCH p.metadata " +
"WHERE p.netid = :netid" );
query.setParameter("netid", netid);
return uniqueResult(query);
} }
@Override @Override
public List<EPerson> search(Context context, String query, List<MetadataField> queryFields, List<MetadataField> sortFields, int offset, int limit) throws SQLException public List<EPerson> search(Context context, String query, List<MetadataField> queryFields, List<MetadataField> sortFields, int offset, int limit) throws SQLException
{ {
String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase() + " "; String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase()
+ " LEFT JOIN FETCH " + EPerson.class.getSimpleName().toLowerCase() + ".metadata ";
if(query != null) query= "%"+query.toLowerCase()+"%"; if(query != null) query= "%"+query.toLowerCase()+"%";
Query hibernateQuery = getSearchQuery(context, queryString, query, queryFields, sortFields, null); Query hibernateQuery = getSearchQuery(context, queryString, query, queryFields, sortFields, null);
@@ -85,7 +98,8 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public List<EPerson> findAll(Context context, MetadataField metadataSortField, String sortField) throws SQLException { public List<EPerson> findAll(Context context, MetadataField metadataSortField, String sortField) throws SQLException {
String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase(); String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase()
+ " LEFT JOIN FETCH " + EPerson.class.getSimpleName().toLowerCase() + ".metadata ";
List<MetadataField> sortFields = ListUtils.EMPTY_LIST; List<MetadataField> sortFields = ListUtils.EMPTY_LIST;
@@ -114,19 +128,25 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public List<EPerson> findWithPasswordWithoutDigestAlgorithm(Context context) throws SQLException { public List<EPerson> findWithPasswordWithoutDigestAlgorithm(Context context) throws SQLException {
Criteria criteria = createCriteria(context, EPerson.class); Query query = createQuery(context,
criteria.add(Restrictions.and( "SELECT p " +
Restrictions.isNotNull("password"), "FROM EPerson p " +
Restrictions.isNull("digestAlgorithm") "LEFT JOIN FETCH p.metadata " +
)); "WHERE p.password IS NOT NULL AND p.digestAlgorithm IS NULL " );
return list(criteria);
return list(query);
} }
@Override @Override
public List<EPerson> findNotActiveSince(Context context, Date date) throws SQLException { public List<EPerson> findNotActiveSince(Context context, Date date) throws SQLException {
Criteria criteria = createCriteria(context, EPerson.class); Query query = createQuery(context,
criteria.add(Restrictions.le("lastActive", date)); "SELECT p " +
return list(criteria); "FROM EPerson p " +
"LEFT JOIN FETCH p.metadata " +
"WHERE p.lastActive <= :date " );
query.setParameter("date", date);
return list(query);
} }
protected Query getSearchQuery(Context context, String queryString, String queryParam, List<MetadataField> queryFields, List<MetadataField> sortFields, String sortField) throws SQLException { protected Query getSearchQuery(Context context, String queryString, String queryParam, List<MetadataField> queryFields, List<MetadataField> sortFields, String sortField) throws SQLException {
@@ -160,7 +180,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public List<EPerson> findAllSubscribers(Context context) throws SQLException { public List<EPerson> findAllSubscribers(Context context) throws SQLException {
return list(createQuery(context, "SELECT DISTINCT e from Subscription s join s.ePerson e")); return list(createQuery(context, "SELECT DISTINCT e from Subscription s JOIN s.ePerson e LEFT JOIN FETCH e.metadata "));
} }
@Override @Override