Java Hibernate-是否有任何API可以获取未知对象的字段值?
我想读取hibernate查询返回的未知对象上的字段。我知道这里可以使用反射。但是有没有任何HibernateAPI可以做到这一点?我只有@Column注释的对象和值 例如:假设我上过以下课程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返回的对象中获取特定字段的值。我将
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);
}