use of io.requery.proxy.CompositeKey in project requery by requery.
the class FunctionalTest method testFindByCompositeKey.
@Test
public void testFindByCompositeKey() {
Group group = new Group();
group.setName("group");
group.setType(GroupType.PRIVATE);
Person person = randomPerson();
person.getGroups().add(group);
data.insert(person);
assertTrue(person.getId() > 0);
// create the composite key
Map<Attribute<Group_Person, Integer>, Integer> map = new LinkedHashMap<>();
map.put(Group_Person.GROUPS_ID, group.getId());
map.put(Group_Person.PERSON_ID, person.getId());
CompositeKey<Group_Person> compositeKey = new CompositeKey<>(map);
Group_Person joined = data.findByKey(Group_Person.class, compositeKey);
assertNotNull(joined);
}
use of io.requery.proxy.CompositeKey in project requery by requery.
the class EntityDataStore method findByKey.
@Override
public <E extends T, K> E findByKey(Class<E> type, K key) {
Type<E> entityType = entityModel.typeOf(type);
if (entityType.isCacheable() && entityCache != null) {
E entity = entityCache.get(type, key);
if (entity != null) {
return entity;
}
}
Set<Attribute<E, ?>> keys = entityType.getKeyAttributes();
if (keys.isEmpty()) {
throw new MissingKeyException();
}
Selection<? extends Result<E>> selection = select(type);
if (keys.size() == 1) {
QueryAttribute<E, Object> attribute = Attributes.query(keys.iterator().next());
selection.where(attribute.equal(key));
} else {
if (key instanceof CompositeKey) {
CompositeKey compositeKey = (CompositeKey) key;
for (Attribute<E, ?> attribute : keys) {
QueryAttribute<E, Object> keyAttribute = Attributes.query(attribute);
Object value = compositeKey.get(keyAttribute);
selection.where(keyAttribute.equal(value));
}
} else {
throw new IllegalArgumentException("CompositeKey required");
}
}
return selection.get().firstOrNull();
}
Aggregations