use of org.hibernate.MappingException in project hibernate-orm by hibernate.
the class QueryAndSQLTest method testImportQueryFromMappedSuperclass.
/**
* We are testing 2 things here:
* 1. The query 'night.olderThan' is defined in a MappedSuperClass - Darkness.
* We are verifying that queries defined in a MappedSuperClass are processed.
* 2. There are 2 Entity classes that extend from Darkness - Night and Twilight.
* We are verifying that this does not cause any issues.eg. Double processing of the
* MappedSuperClass
*/
@Test
public void testImportQueryFromMappedSuperclass() {
Session s = openSession();
try {
s.getNamedQuery("night.olderThan");
} catch (MappingException ex) {
fail("Query imported from MappedSuperclass");
}
s.close();
}
use of org.hibernate.MappingException in project hibernate-orm by hibernate.
the class InFlightMetadataCollectorImpl method buildUniqueKeyFromColumnNames.
private void buildUniqueKeyFromColumnNames(final Table table, String keyName, final String[] columnNames, String[] orderings, boolean unique, final MetadataBuildingContext buildingContext) {
int size = columnNames.length;
Column[] columns = new Column[size];
Set<Column> unbound = new HashSet<Column>();
Set<Column> unboundNoLogical = new HashSet<Column>();
for (int index = 0; index < size; index++) {
final String logicalColumnName = columnNames[index];
try {
final String physicalColumnName = getPhysicalColumnName(table, logicalColumnName);
columns[index] = new Column(physicalColumnName);
unbound.add(columns[index]);
//column equals and hashcode is based on column name
} catch (MappingException e) {
// If at least 1 columnName does exist, 'columns' will contain a mix of Columns and nulls. In order
// to exhaustively report all of the unbound columns at once, w/o an NPE in
// Constraint#generateName's array sorting, simply create a fake Column.
columns[index] = new Column(logicalColumnName);
unboundNoLogical.add(columns[index]);
}
}
final String originalKeyName = keyName;
if (unique) {
final Identifier keyNameIdentifier = getMetadataBuildingOptions().getImplicitNamingStrategy().determineUniqueKeyName(new ImplicitUniqueKeyNameSource() {
@Override
public MetadataBuildingContext getBuildingContext() {
return buildingContext;
}
@Override
public Identifier getTableName() {
return table.getNameIdentifier();
}
private List<Identifier> columnNameIdentifiers;
@Override
public List<Identifier> getColumnNames() {
// be lazy about building these
if (columnNameIdentifiers == null) {
columnNameIdentifiers = toIdentifiers(columnNames);
}
return columnNameIdentifiers;
}
@Override
public Identifier getUserProvidedIdentifier() {
return originalKeyName != null ? Identifier.toIdentifier(originalKeyName) : null;
}
});
keyName = keyNameIdentifier.render(getDatabase().getJdbcEnvironment().getDialect());
UniqueKey uk = table.getOrCreateUniqueKey(keyName);
for (int i = 0; i < columns.length; i++) {
Column column = columns[i];
String order = orderings != null ? orderings[i] : null;
if (table.containsColumn(column)) {
uk.addColumn(column, order);
unbound.remove(column);
}
}
} else {
final Identifier keyNameIdentifier = getMetadataBuildingOptions().getImplicitNamingStrategy().determineIndexName(new ImplicitIndexNameSource() {
@Override
public MetadataBuildingContext getBuildingContext() {
return buildingContext;
}
@Override
public Identifier getTableName() {
return table.getNameIdentifier();
}
private List<Identifier> columnNameIdentifiers;
@Override
public List<Identifier> getColumnNames() {
// be lazy about building these
if (columnNameIdentifiers == null) {
columnNameIdentifiers = toIdentifiers(columnNames);
}
return columnNameIdentifiers;
}
@Override
public Identifier getUserProvidedIdentifier() {
return originalKeyName != null ? Identifier.toIdentifier(originalKeyName) : null;
}
});
keyName = keyNameIdentifier.render(getDatabase().getJdbcEnvironment().getDialect());
Index index = table.getOrCreateIndex(keyName);
for (int i = 0; i < columns.length; i++) {
Column column = columns[i];
String order = orderings != null ? orderings[i] : null;
if (table.containsColumn(column)) {
index.addColumn(column, order);
unbound.remove(column);
}
}
}
if (unbound.size() > 0 || unboundNoLogical.size() > 0) {
StringBuilder sb = new StringBuilder("Unable to create ");
if (unique) {
sb.append("unique key constraint (");
} else {
sb.append("index (");
}
for (String columnName : columnNames) {
sb.append(columnName).append(", ");
}
sb.setLength(sb.length() - 2);
sb.append(") on table ").append(table.getName()).append(": database column ");
for (Column column : unbound) {
sb.append("'").append(column.getName()).append("', ");
}
for (Column column : unboundNoLogical) {
sb.append("'").append(column.getName()).append("', ");
}
sb.setLength(sb.length() - 2);
sb.append(" not found. Make sure that you use the correct column name which depends on the naming strategy in use (it may not be the same as the property name in the entity, especially for relational types)");
throw new AnnotationException(sb.toString());
}
}
use of org.hibernate.MappingException in project hibernate-orm by hibernate.
the class MetadataImpl method getReferencedPropertyType.
@Override
public org.hibernate.type.Type getReferencedPropertyType(String entityName, String propertyName) throws MappingException {
final PersistentClass pc = entityBindingMap.get(entityName);
if (pc == null) {
throw new MappingException("persistent class not known: " + entityName);
}
Property prop = pc.getReferencedProperty(propertyName);
if (prop == null) {
throw new MappingException("property not known: " + entityName + '.' + propertyName);
}
return prop.getType();
}
use of org.hibernate.MappingException in project hibernate-orm by hibernate.
the class InFlightMetadataCollectorImpl method getPhysicalColumnName.
@Override
public String getPhysicalColumnName(Table table, Identifier logicalName) throws MappingException {
if (logicalName == null) {
throw new MappingException("Logical column name cannot be null");
}
Table currentTable = table;
String physicalName = null;
while (currentTable != null) {
final TableColumnNameBinding binding = columnNameBindingByTableMap.get(currentTable);
if (binding != null) {
physicalName = binding.logicalToPhysical.get(logicalName);
if (physicalName != null) {
break;
}
}
if (DenormalizedTable.class.isInstance(currentTable)) {
currentTable = ((DenormalizedTable) currentTable).getIncludedTable();
} else {
currentTable = null;
}
}
if (physicalName == null) {
throw new MappingException("Unable to find column with logical name " + logicalName.render() + " in table " + table.getName());
}
return physicalName;
}
use of org.hibernate.MappingException in project hibernate-orm by hibernate.
the class InFlightMetadataCollectorImpl method secondPassCompileForeignKeys.
protected void secondPassCompileForeignKeys(final Table table, Set<ForeignKey> done, final MetadataBuildingContext buildingContext) throws MappingException {
table.createForeignKeys();
Iterator itr = table.getForeignKeyIterator();
while (itr.hasNext()) {
final ForeignKey fk = (ForeignKey) itr.next();
if (!done.contains(fk)) {
done.add(fk);
final String referencedEntityName = fk.getReferencedEntityName();
if (referencedEntityName == null) {
throw new MappingException("An association from the table " + fk.getTable().getName() + " does not specify the referenced entity");
}
log.debugf("Resolving reference to class: %s", referencedEntityName);
final PersistentClass referencedClass = getEntityBinding(referencedEntityName);
if (referencedClass == null) {
throw new MappingException("An association from the table " + fk.getTable().getName() + " refers to an unmapped class: " + referencedEntityName);
}
if (referencedClass.isJoinedSubclass()) {
secondPassCompileForeignKeys(referencedClass.getSuperclass().getTable(), done, buildingContext);
}
fk.setReferencedTable(referencedClass.getTable());
Identifier nameIdentifier;
ImplicitForeignKeyNameSource foreignKeyNameSource = new ImplicitForeignKeyNameSource() {
final List<Identifier> columnNames = extractColumnNames(fk.getColumns());
List<Identifier> referencedColumnNames = null;
@Override
public Identifier getTableName() {
return table.getNameIdentifier();
}
@Override
public List<Identifier> getColumnNames() {
return columnNames;
}
@Override
public Identifier getReferencedTableName() {
return fk.getReferencedTable().getNameIdentifier();
}
@Override
public List<Identifier> getReferencedColumnNames() {
if (referencedColumnNames == null) {
referencedColumnNames = extractColumnNames(fk.getReferencedColumns());
}
return referencedColumnNames;
}
@Override
public Identifier getUserProvidedIdentifier() {
return fk.getName() != null ? Identifier.toIdentifier(fk.getName()) : null;
}
@Override
public MetadataBuildingContext getBuildingContext() {
return buildingContext;
}
};
nameIdentifier = getMetadataBuildingOptions().getImplicitNamingStrategy().determineForeignKeyName(foreignKeyNameSource);
fk.setName(nameIdentifier.render(getDatabase().getJdbcEnvironment().getDialect()));
fk.alignColumns();
}
}
}
Aggregations