我使用以下代码从JPA获取数据,但是读取调用可以用于任何实体(动态调用),因为结果列表是通用的,但结构总是与此结果相同
Person [firstName=firstName 1, lastName=lastName 1, bigDecimal=0, myDate=Wed Sep 16 06:42:18 IST 1998],
Person [firstName=firstName 2, lastName=lastName 2, bigDecimal=0, myDate=Sun May 19 13:12:51 IDT 1957],
Person [firstName=firstName 3, lastName=lastName 3, bigDecimal=0, myDate=Fri Jun 03 05:09:20 IDT 1949],
这里的结果是针对人的,但它可以针对每个实体而且结果具有完全相同的结构 entityname(这里是person)和key val如firstname是键,val是firstname1等
如何从结果列表中打印出来,比如实体名称和键值列表以及相应的数据?
这是我用来获取数据的代码。
factory = Persistence.createEntityManagerFactory("abc");
EntityManager entityManager = factory.createEntityManager();
Query query = entityManager.createQuery("SELECT p FROM " + className + " p");
List resultList = query.getResultList();
我不能使用像List<Person> resultList
这样的定义,因为这只与Person有关,在RT期间,我可以获得客户,地址,销售订单等任何实体(所有实体都是类型) JPA类)并且具有类名和类名称和值的繁荣
例如,这里的类是
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private String firstName;
private String lastName;
答案 0 :(得分:3)
如果你想在控制台/日志中打印数据,我认为它就像覆盖Person类中的toString()
方法一样简单。
答案 1 :(得分:2)
您可以创建一个使用反射来构建任何对象的字符串表示形式的通用String实用程序。您将获得具有以下内容的字段列表:
List result = new ArrayList();
Field[] f = <your object>.getClass().getDeclaredFields();
for (int i = 0; i < f.length; i++) {
if (!Modifier.isStatic(f[i].getModifiers())) {
result.add(f[i]);
}
}
return result.iterator();
然后为每个字段做类似的事情:
try {
field.setAccessible(true);
Object value = field.get(<your object>);
<String buffer of your generic toString representation>.append(value);
} catch (IllegalAccessException e) {
// e.printStackTrace() obviously
}
更新
或者,如果您喜欢库,可以使用Apache Commons Lang的ReflectionToStringBuilder。我不知道默认的ToStringStyle是否是您需要的,但它可能很容易进行子类化。