使用反射从POJO获取id列名

时间:2015-06-21 15:56:40

标签: java jpa reflection annotations

@Entity
@Table(name="MY_TABLE")
public class MyTable{

    @Id 
    @Column(name="MY_TABLE_ID") 
    @GeneratedValue(strategy = GenerationType.AUTO ,generator="SQ_MY_TABLE")    
    @SequenceGenerator(name="SQ_MY_TABLE", sequenceName="SQ_MY_TABLE")
    private Long myTableId;

如何使用反射从我的POJO中获取主键列名称,并使用javax.persistence.Id注释定义?我必须找到@Id,然后获取name注释的@Column属性...我不知道该怎么做...

谢谢!

1 个答案:

答案 0 :(得分:3)

这是一个独立的解决方案:

public static String getPKColumnName(Class<?> pojo) {

    if (pojo == null) 
        return null;

    String name = null;

    for (Field f : pojo.getDeclaredFields()) {

        Id id = null;
        Column column = null;

        Annotation[] as = f.getAnnotations();
        for (Annotation a : as) {
            if (a.annotationType() == Id.class) 
                id = (Id) a;
            else if (a.annotationType() == Column.class) 
                column = (Column) a;
        }

        if (id != null && column != null){
            name = column.name();
            break;
        }
    }

    if (name == null && pojo.getSuperclass() != Object.class)
        name = getPKColumnName(pojo.getSuperclass());

    return name;
}

只是单挑:这对复合主键不起作用。