UniqueConstraint uniqueConstraint = new UniqueConstraint(); uniqueConstraint.setName(hibernateUnique.getName()); uniqueConstraint.setTable(table); Iterator columnIterator = hibernateUnique.getColumnIterator(); int i = 0; while (columnIterator.hasNext()) { org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); uniqueConstraint.addColumn(i, new Column(hibernateColumn.getName()).setRelation(table)); i++; uniqueConstraint.setBackingIndex(index); LOG.info("Found unique constraint " + uniqueConstraint.toString()); table.getUniqueConstraints().add(uniqueConstraint); org.hibernate.mapping.Column column = (org.hibernate.mapping.Column) columnIterator.next(); if (column.isUnique()) { UniqueConstraint uniqueConstraint = new UniqueConstraint(); uniqueConstraint.setTable(table); String name = "UC_" + table.getName().toUpperCase() + column.getName().toUpperCase() + "_COL"; if (name.length() > 64) { name = name.substring(0, 63); uniqueConstraint.addColumn(0, new Column(column.getName()).setRelation(table)); uniqueConstraint.setName(name); LOG.info("Found unique constraint " + uniqueConstraint.toString()); table.getUniqueConstraints().add(uniqueConstraint); uniqueConstraint.setBackingIndex(index);
protected Index getBackingIndex(UniqueConstraint uniqueConstraint, org.hibernate.mapping.Table hibernateTable, DatabaseSnapshot snapshot) { Index index = new Index(); index.setTable(uniqueConstraint.getTable()); index.setColumns(uniqueConstraint.getColumns()); index.setUnique(true); return index; }
@Override public void check(Database database) throws CustomPreconditionFailedException, CustomPreconditionErrorException { Column column = new Column(this.columnNames); UniqueConstraint uniqueConstraint = new UniqueConstraint(this.constraintName, null, null, this.tableName, column); boolean markFailed = false; try { if (!SnapshotGeneratorFactory.getInstance().has(uniqueConstraint, database)) { markFailed = true; } } catch (Exception e) { throw new CustomPreconditionErrorException("custom precondition check errored", e); } if (markFailed) { throw new CustomPreconditionFailedException(this.constraintName + " doesn't exist"); } } }