/** * Find object based on primary key either form persistence cache or from * database * * @param entityClass * @param primaryKey * @return */ public <E> E findById(final Class<E> entityClass, final Object primaryKey) { E e = find(entityClass, primaryKey); if (e == null) { return null; } // Return a copy of this entity return (E) (e); }
/** * Retrieves a {@link List} of Entities for given Primary Keys * * @param entityClass * Entity Class * @param primaryKeys * Array of Primary Keys * @see {@link PersistenceDelegator#find(Class, Object)} * @return List of found entities */ // TODO Is it possible to pass all primary keys directly to database client. public <E> List<E> find(Class<E> entityClass, Object... primaryKeys) { List<E> entities = new ArrayList<E>(); if (primaryKeys == null) { return entities; } Set<Object> pKeys = new HashSet<Object>(Arrays.asList(primaryKeys)); for (Object primaryKey : pKeys) { E e = find(entityClass, primaryKey); if (e != null) { entities.add(e); } } return entities; }
@Override public List<?> getResultList() { if (log.isDebugEnabled()) log.debug("JPA Query: " + getJPAQuery()); // get luence query String q = luceneQuery; if (null == q) { q = KunderaCoreUtils.getLuceneQueryFromJPAQuery(kunderaQuery, kunderaMetadata); } if (log.isDebugEnabled()) log.debug("Lucene Query: " + q); EntityMetadata m = kunderaQuery.getEntityMetadata(); Client client = persistenceDelegeator.getClient(m); handlePostEvent(); Map<String, Object> searchFilter = client.getIndexManager().search(m.getEntityClazz(), q, -1, maxResult); if (kunderaQuery.isAliasOnly()) { String[] primaryKeys = searchFilter.values().toArray(new String[] {}); return persistenceDelegeator.find(m.getEntityClazz(), primaryKeys); } else { return persistenceDelegeator.find(m.getEntityClazz(), searchFilter); } }
@Test public void testFindForObjectArray() { PersonnelDTO dto = new PersonnelDTO(); dto.setPersonId("111"); em.persist(dto); dto = new PersonnelDTO(); dto.setPersonId("222"); em.persist(dto); dto = new PersonnelDTO(); dto.setPersonId("333"); em.persist(dto); PersistenceDelegator pd = ((EntityManagerImpl) em).getPersistenceDelegator(); List<PersonnelDTO> persons = pd.find(PersonnelDTO.class, new String[] { "111", "222", "333" }); Assert.assertNotNull(persons); Assert.assertEquals(3, persons.size()); }
relation.getTargetEntity()); Object child = delegator.find(relation.getTargetEntity(), foreignKey); Object obj = child instanceof EnhanceEntity && child != null ? ((EnhanceEntity) child).getEntity() : child; Object[] pKeys = pClient.findIdsByColumn(entityMetadata.getSchema(), joinTableName, joinColumnName, inverseJoinColumnName, columnValue, entityMetadata.getEntityClazz()); List parents = delegator.find(entity.getClass(), pKeys); PropertyAccessorHelper.set(obj, biDirectionalField, ObjectUtils.getFieldInstance(parents, biDirectionalField));