Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 Hibernate-是否有任何API可以获取未知对象的字段值?_Java_Hibernate_Reflection_Annotations - Fatal编程技术网

Java Hibernate-是否有任何API可以获取未知对象的字段值?

Java Hibernate-是否有任何API可以获取未知对象的字段值?,java,hibernate,reflection,annotations,Java,Hibernate,Reflection,Annotations,我想读取hibernate查询返回的未知对象上的字段。我知道这里可以使用反射。但是有没有任何HibernateAPI可以做到这一点?我只有@Column注释的对象和值 例如:假设我上过以下课程 class Person { @Column(name = "nick_name") String name; } 当Hibernate将此对象作为查询的一部分返回时,我希望使用nick_name属性获取字段名的值 编辑: 我的要求是从Hibernate返回的对象中获取特定字段的值。我将

我想读取hibernate查询返回的未知对象上的字段。我知道这里可以使用反射。但是有没有任何HibernateAPI可以做到这一点?我只有@Column注释的对象和值

例如:假设我上过以下课程

class Person {
    @Column(name = "nick_name")
    String name;
}
当Hibernate将此对象作为查询的一部分返回时,我希望使用nick_name属性获取字段名的值

编辑:

我的要求是从Hibernate返回的对象中获取特定字段的值。我将用一个例子来解释

Object obj = queryHibernateForObject();

假设obj是Person类型的,我想从这个对象中获取nick_name字段的值。

没有查询它是不干净的,但我想您会遇到这样的情况

您可以使用对象[]:

String sql = "select s.rollNo, s.name, s.address from Student s";
Query query = session.createQuery(sql);
List list = query.list();
Iterator iterator = list.iterator();
for (Iterator it = query.iterate(); it.hasNext();) {
    Object[] object = (Object[]) it.next();
    System.out.println(object[0]);
    System.out.println(object[1]);
    System.out.println(object[2]);
}
或者您可以使用JPA查询功能:

String sql = "select new com.some.pkg.SomeDtoClass(s.rollNo, s.name, s.address) from Student s";
Query query = session.createQuery(sql);
List<SomeDtoClass> list = (List<SomeDtoClass>)query.list();

在这种情况下,在“选择”中使用别名很重要。否则,您将获得映射键0、1、…

您可以使用反射:

public static <T> getFieldByColumnName(Object obj, String columnName) throws Exception {
    for (Field field : obj.getClass().getDeclaredFields()) {
        Annotation a = field.getAnnotation(Column.class);
        if (a != null && a.getValue().equals(columnName)) {
            return <T> field.get(obj);
        }
    }
    throw new IllegalArgumentException("No such column:" + columnName);
}
免责声明:从内存登录iPhone-可能存在语法错误

public static <T> getFieldByColumnName(Object obj, String columnName) throws Exception {
    for (Field field : obj.getClass().getDeclaredFields()) {
        Annotation a = field.getAnnotation(Column.class);
        if (a != null && a.getValue().equals(columnName)) {
            return <T> field.get(obj);
        }
    }
    throw new IllegalArgumentException("No such column:" + columnName);
}