/** * {@inheritDoc} */ @Override public boolean next() { try { return resultSet.next(); } catch (SQLException sex) { throw new DbOomException(sex); } }
private void ensureSingleIdColumn() { init(); if (idColumnDescriptors == null) { throw new DbOomException("No identity column in entity: " + entityName); } else if (idColumnDescriptors.length > 1) { throw new DbOomException("More then one identity column in entity: " + entityName); } }
/** * Creates new entity instances. */ public <E> E createEntityInstance(final Class<E> type) { try { return ClassUtil.newInstance(type); } catch (Exception ex) { throw new DbOomException(ex); } }
/** * {@inheritDoc} */ @Override public Class[] resolveTables() { List<Class> classes = new ArrayList<>(tableNames.length); String lastTableName = null; resultColumns.clear(); for (int i = 0; i < tableNames.length; i++) { String tableName = tableNames[i]; String columnName = columnNames[i]; if (tableName == null) { // maybe JDBC driver does not support it throw new DbOomException(dbOomQuery, "Table name missing in meta-data"); } if ((!tableName.equals(lastTableName)) || (resultColumns.contains(columnName))) { resultColumns.clear(); lastTableName = tableName; DbEntityDescriptor ded = dbEntityManager.lookupTableName(tableName); if (ded == null) { throw new DbOomException(dbOomQuery, "Table name not registered: " + tableName); } classes.add(ded.getType()); } resultColumns.add(columnName); } return classes.toArray(new Class[0]); }
throw new DbOomException("Duplicate column name: " + dec.getColumnName()); throw new DbOomException("No column mappings in entity: " + type);
ResultSetMetaData rsMetaData = resultSet.getMetaData(); if (rsMetaData == null) { throw new DbOomException("No ResultSet meta-data"); throw new DbOomException(dbOomQuery, "Reading ResultSet meta-data failed", sex);
/** * Registers entity. {@link #registerType(Class) Registers types} and table names. */ public <E> DbEntityDescriptor<E> registerEntity(final Class<E> type) { DbEntityDescriptor<E> ded = registerType(type); DbEntityDescriptor existing = tableNamesMap.put(ded.getTableName(), ded); if (existing != null) { if (ded.getType() == type) { return ded; } throw new DbOomException("Entity registration failed! Table '" + ded.getTableName() + "' already mapped to an entity: " + existing.getType()); } return ded; }
/** * Registers just type and entity names. Enough for most usages. */ public <E> DbEntityDescriptor<E> registerType(final Class<E> type) { DbEntityDescriptor<E> ded = createDbEntityDescriptor(type); DbEntityDescriptor<E> existing = descriptorsMap.put(type, ded); if (log.isDebugEnabled()) { log.debug("Register " + type.getName() + " as " + ded.getTableName()); } if (existing != null) { if (ded.getType() == type) { return ded; } throw new DbOomException("Type already registered: " + existing.getType()); } existing = entityNamesMap.put(ded.getEntityName(), ded); if (existing != null) { throw new DbOomException("Name '" + ded.getEntityName() + "' already mapped to an entity: " + existing.getType()); } return ded; }
Object value = context.get(key); if (value == null) { throw new DbOomException("Hint value missing: " + key); throw new DbOomException(ex); throw new DbOomException(ex);
/** * Configures {@link DbEntityManager} with specified class path. */ public void configure() { long elapsed = System.currentTimeMillis(); final ClassScanner classScanner = new ClassScanner(); classScanner.detectEntriesMode(true); classScanner.scanDefaultClasspath(); classScannerConsumers.accept(classScanner); registerAsConsumer(classScanner); try { classScanner.start(); } catch (Exception ex) { throw new DbOomException("Scan classpath error", ex); } elapsed = System.currentTimeMillis() - elapsed; if (log.isInfoEnabled()) { log.info("DbEntityManager configured in " + elapsed + "ms. Total entities: " + dbEntityManager.getTotalNames()); } }
/** * Registers a class consumer that registers only those annotated with {@link DbTable}. * Because of performance purposes, classes are not dynamically loaded; instead, their * file content is examined. */ public void registerAsConsumer(final ClassScanner classScanner) { classScanner.registerEntryConsumer(classPathEntry -> { if (!classPathEntry.isTypeSignatureInUse(DB_TABLE_ANNOTATION_BYTES)) { return; } final Class<?> beanClass; try { beanClass = classPathEntry.loadClass(); } catch (ClassNotFoundException cnfex) { throw new DbOomException("Entry class not found: " + classPathEntry.name(), cnfex); } if (beanClass == null) { return; } final DbTable dbTable = beanClass.getAnnotation(DbTable.class); if (dbTable == null) { return; } if (registerAsEntities) { dbEntityManager.registerEntity(beanClass); } else { dbEntityManager.registerType(beanClass); } }); }
/** * Reads column value from result set. Since this method may be called more then once for * the same column, it caches column values. */ @SuppressWarnings({"unchecked"}) protected Object readColumnValue(final int colNdx, final Class destinationType, final Class<? extends SqlType> sqlTypeClass, final int columnDbSqlType) { if (colNdx != cachedColumnNdx) { try { SqlType sqlType; if (sqlTypeClass != null) { sqlType = SqlTypeManager.get().lookupSqlType(sqlTypeClass); } else { sqlType = SqlTypeManager.get().lookup(destinationType); } if (sqlType != null) { cachedColumnValue = sqlType.readValue(resultSet, colNdx + 1, destinationType, columnDbSqlType); } else { cachedColumnValue = resultSet.getObject(colNdx + 1); cachedColumnValue = TypeConverterManager.get().convertType(cachedColumnValue, destinationType); } } catch (SQLException sex) { throw new DbOomException(dbOomQuery, "Invalid value for column #" + (colNdx + 1), sex); } cachedColumnNdx = colNdx; } return cachedColumnValue; }
throw new DbOomException("Not an entity: " + type);
/** * Creates new entity instances. */ public <E> E createEntityInstance(Class<E> type) { try { return type.newInstance(); } catch (Exception ex) { throw new DbOomException("Unable to create new entity instance using default constructor for type: " + type, ex); } }
/** * {@inheritDoc} */ public boolean next() { try { return rs.next(); } catch (SQLException sex) { throw new DbOomException("Unable to move ResultSet cursor to next position.", sex); } }
/** * {@inheritDoc} */ @Override public boolean next() { try { return resultSet.next(); } catch (SQLException sex) { throw new DbOomException(sex); } }
private void ensureSingleIdColumn() { init(); if (idColumnDescriptors == null) { throw new DbOomException("Entity '" + entityName + "' has no identity column."); } else if (idColumnDescriptors.length > 1) { throw new DbOomException("Entity '" + entityName + "' has more then one (" + idColumnDescriptors.length + ") identity columns."); } }
private void ensureSingleIdColumn() { init(); if (idColumnDescriptors == null) { throw new DbOomException("No identity column in entity: " + entityName); } else if (idColumnDescriptors.length > 1) { throw new DbOomException("More then one identity column in entity: " + entityName); } }
/** * Creates new entity instances. */ public <E> E createEntityInstance(final Class<E> type) { try { return ClassUtil.newInstance(type); } catch (Exception ex) { throw new DbOomException(ex); } }
/** * Registers entity. {@link #registerType(Class) Registers types} and table names. * Throw exception is type is already registered. */ public DbEntityDescriptor registerEntity(Class type) { DbEntityDescriptor ded = registerType(type); DbEntityDescriptor existing = tableNamesMap.put(ded.getTableName(), ded); if (existing != null) { throw new DbOomException("Entity registration failed! Table '" + ded.getTableName() + "' already mapped to an entity class: " + existing.getType()); } return ded; }