Skip to content

Instantly share code, notes, and snippets.

@brunoadacosta
Created February 17, 2011 19:06
Show Gist options
  • Save brunoadacosta/832401 to your computer and use it in GitHub Desktop.
Save brunoadacosta/832401 to your computer and use it in GitHub Desktop.
Faz validação de constraints
@SuppressWarnings("unused")
private void checkConstraints(T entity, boolean isUpdate) {
List<Field> fields = mirror.on(entity.getClass()).reflectAll().fields();
List<Field> uniqueFields = onlyUniqueColumns(fields);
if (uniqueFields.size() != 0) {
validateConstraints(entity, isUpdate, mirror, uniqueFields);
}
}
private void validateConstraints(T entity, boolean isUpdate, Mirror mirror,
List<Field> uniqueFields) {
Criteria criteria = session.createCriteria(entity.getClass());
Conjunction conjunction = Restrictions.conjunction();
if (isUpdate) {
conjunction.add(Restrictions.ne("id", mirror.on(entity).get().field("id")));
}
for (Field field : uniqueFields) {
conjunction.add(Restrictions.eq(field.getName(), mirror.on(entity).get().field(field)));
}
if (criteria.add(conjunction).list().size() != 0)
{
throw new org.hibernate.exception.ConstraintViolationException("could not insert: " + entity.getClass().getName(), new SQLException(), "");
}
}
private List<Field> onlyUniqueColumns(List<Field> fields) {
List<Field> uniqueFields = new ArrayList<Field>();
for (Field field : fields) {
if (field.isAnnotationPresent(Column.class)) {
addUniqueField(uniqueFields, field);
}
}
return uniqueFields;
}
private void addUniqueField(List<Field> uniqueFields, Field field) {
Column column = field.getAnnotation(Column.class);
if (column.unique()) {
uniqueFields.add(field);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment