package org.openlca.core.database; import java.sql.SQLException; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.openlca.core.model.UnitGroup; import org.openlca.core.model.descriptors.UnitGroupDescriptor; public class UnitGroupDao extends CategorizedEntityDao<UnitGroup, UnitGroupDescriptor> { public UnitGroupDao(IDatabase database) { super(UnitGroup.class, UnitGroupDescriptor.class, database); } public boolean hasReferenceUnit(long id) { return hasReferenceUnit(Collections.singleton(id)).get(id); } public Map<Long, Boolean> hasReferenceUnit(Set<Long> ids) { StringBuilder query = new StringBuilder(); query.append("SELECT id, f_reference_unit FROM tbl_unit_groups "); query.append("WHERE id IN " + asSqlList(ids)); query.append(" AND f_reference_unit IN "); query.append("(SELECT id FROM tbl_units WHERE id = f_reference_unit)"); Map<Long, Boolean> result = new HashMap<>(); for (long id : ids) result.put(id, false); try { NativeSql.on(database).query(query.toString(), (res) -> { result.put(res.getLong(1), res.getLong(2) != 0l); return true; }); } catch (SQLException e) { log.error("Error checking for reference unit existence", e); } return result; } }