3
respostas

Annotation

Olá, estou gerando um create table com reflection, porém gostaria de atráves das annotations definir qual FIELD é a PK.Tenho um código mais creio que algo está faltando ou está incorreto, se alguem puder dar uma ajuda.

for (int i = 0, pks = 0; i < fields.length; i++) {

            Field f = fields[i];

            if (f.isAnnotationPresent(Column.class)) {

                Column annotationColumn = f.getAnnotation(Column.class);

                int valueAt = annotationColumn.pk();

                if (valueAt == 1) {

                    if (pks > 0) {

                        sb.append(",");
                        sb.append(" " + "PRIMARY KEY");
                    }

                    pks++;
                }
            }
        }
        sb.append("\n);");
        return sb.toString();
    }

Annotation

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {

    int pk() default 0;

}

E na classe instanciada.

@Column(pk = 1)
    int id;

Como sou novo com reflection, gostaria de saber o que tem de errado.

3 respostas

não parece ter algo de errado no seu código.. vc pega o valor do atributo pk e compara com 1. O que acontece?

Acontece nada, este é o mistério, deveria criar no atributo com a annotation o "PRIMARY KEY".

Cara, o seu código não teria que ser?


              if (valueAt == 1) {

                    if (pks > 0) {
                        sb.append(",");
                    }
                    sb.append(" " + "PRIMARY KEY");

                    pks++;
                }