我想读取hibernate查询返回的Unknown对象上的字段。我知道这里可以使用反射。但是有没有可用的Hibernate API呢?我只有@Column注释的对象和值。
例如:让我们说我跟随课程
class Person {
@Column(name = "nick_name")
String name;
}
当Hibernate将此对象作为查询的一部分返回时,我想使用" nick_name"来获取字段名称的值。 name属性。
修改
我的要求是从Hibernate返回的对象中获取特定字段的值。我将以一个例子来解释
Object obj = queryHibernateForObject();
让我们说obj属于Person类型,我想获取" nick_name"的值。该对象的字段。
答案 0 :(得分:0)
没有询问不干净,但是认为有这样的状况 Handling Unknown Objects in ArrayList
您可以使用Object []:
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();
在查询中指定完整的类名非常重要。 SomeDtoClass也应该有适当的构造函数。
或者您可以使用setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
String sql = "select s.rollNo as rollNo, s.name as name, s.address as address from Student s";
Query query = session.createQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List list = query.list();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Map map=(Map)iterator.next();
System.out.println(map.get("rollNo"));
System.out.println(map.get("name"));
System.out.println(map.get("address"));
}
在这种情况下,在select中使用别名很重要。否则你会得到地图键&#34; 0&#34;,&#34; 1&#34;,...
答案 1 :(得分:0)
你可以使用反射:
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 - 可能存在语法错误。