Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用反射从POJO获取id列名_Java_Jpa_Reflection_Annotations - Fatal编程技术网

Java 使用反射从POJO获取id列名

Java 使用反射从POJO获取id列名,java,jpa,reflection,annotations,Java,Jpa,Reflection,Annotations,如何使用反射从POJO中获取主键列名,该POJO由javax.persistence.Id注释定义?我必须找到@Id,然后获取@Column注释的name属性。。。我不知道该怎么做 谢谢 这是全靠自己的解决方案: @Entity @Table(name="MY_TABLE") public class MyTable{ @Id @Column(name="MY_TABLE_ID") @GeneratedValue(strategy = GenerationType.

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


谢谢

这是全靠自己的解决方案:

@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;
公共静态字符串getPKColumnName(类pojo){
if(pojo==null)
返回null;
字符串名称=null;
for(字段f:pojo.getDeclaredFields()){
Id=null;
Column=null;
注释[]as=f.getAnnotations();
对于(注释a:as){
if(a.annotationType()==Id.class)
id=(id)a;
else if(a.annotationType()==Column.class)
列=(列)a;
}
if(id!=null&&column!=null){
name=column.name();
打破
}
}
if(name==null&&pojo.getSuperclass()!=Object.class)
name=getPKColumnName(pojo.getSuperclass());
返回名称;
}

提醒一下:这对复合主键不起作用。

当ID的声明位于
MappedSuperclass
中时,这不起作用。但是如果(name==null)返回getPkColumnName(pojo.getSuperclass()),则可以添加
在结尾处。@TobiasLiefke谢谢您提供的信息。我改变了密码。
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;
}