prbpedro 6 de jan. de 2009
public String findIdColumnName ( Class clazz ) {
List < String > r = new ArrayList < String > () ;
Field [] fileds = clazz .getDeclaredFields () ;
for ( Field f : fileds ) {
for ( Annotation annotation : f .getAnnotations ())
if ( annotation .equals ( Id .class ))
return f .getName () ;
}
return "" ;
}
Lavieri 6 de jan. de 2009
vlw cara ^^ teu código funfou, aliais, quase... tive q fazer uma modificação...
na linha
if ( annotation .equals ( Id .class ))
troquei por
if ( annotation .annotationType () .equals ( Id .class ))
esse já funfou pra achar o nome... no caso de quando tem Column ainda não ... vou ver c dou uma mudada aki
meu código por enquanto ta assim
public class Teste {
public class Material {
@Id @Column ( name = "cod_interno" ) private Integer id ;
@NotNull private String nome ;
//... métodos
}
public class Aluno {
@Id private Integer matricula ;
@NotNull private String nome ;
//... métodos
}
public static void main ( String [] args ) {
//... resultado do console abaixo ...
System . out . println ( findIdColumnName ( Aluno . class ));
//cod_interno
System . out . println ( findIdColumnName ( Material . class ));
//matricula
}
public static String findIdColumnName ( Class clazz ) {
String fieldName = null ;
Field [] fileds = clazz . getDeclaredFields ();
for ( Field f : fileds ) {
for ( Annotation annotation : f . getAnnotations ())
if ( annotation . annotationType (). equals ( Id . class )) {
fieldName = f . getName ();
break ;
}
}
return fieldName ;
}
}
prbpedro 6 de jan. de 2009
Assim eu acho que te atende.
public String findIdColumnName ( Class clazz ) {
List < String > r = new ArrayList < String > () ;
Field [] fileds = clazz .getDeclaredFields () ;
for ( Field f : fileds ) {
if ( f .getAnnotation ( Id .class ) != null ) {
if ( f .getAnnotation ( Column .class ) != null ))
return f .getAnnotation ( Column .class ) .name () ;
return f .getName () ;
}
}
return "" ;
}
Lavieri 6 de jan. de 2009
é agora funciona… eu fiz um pouco diferente do seu… por conta da norma da sun que fala pra num usar + de 1 return no mesmo método
public static String findIdColumnName(Class clazz) {
String fieldName = null;
Field[] fileds = clazz.getDeclaredFields();
int cursor = 0;
boolean needSearch = (fileds.length > 0);
while (needSearch) {
Field f = fileds[cursor++];
if (f.isAnnotationPresent(Id.class))
if (f.isAnnotationPresent(Column.class))
fieldName = f.getAnnotation(Column.class).name();
else
fieldName = f.getName();
needSearch = (fieldName == null && cursor < fileds.length);
}
return fieldName;
}
jairelton 6 de jan. de 2009
<blockquote><div class= "quote-author" > “prbpedro”:</div> for(Annotation annotation : f.getAnnotations())
if(annotation.equals(Id.class))
return f.getName();</blockquote>
No lugar desse for, o código abaixo não funciona?
if ( f .isAnnotationPresent ( Id .class )) {