我使用以下代碼從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],
這裏的結果是人,但它可以爲每個實體,其結果與酷似 實體名稱(這裏是人)和關鍵VAL相同的結構就像名字是關鍵和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
,因爲這是關係到義人與RT中我能得到這樣的客戶,地址,銷售訂單等任何實體。(所有的實體是類型JPA類),並有例如類名和類名的prosperites和價值
這裏的類是
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private String firstName;
private String lastName;
要非常小心這種方法,因爲在使用JPA實體時,您可能會獲得動態生成的CGLib或Javassist代理,而不是實際類的實例。你最好使用訪問器而不是直接獲取字段。並且確保不要遞歸地瀏覽關聯,因爲你會有無限循環,並且/或者你會將整個數據庫加載到內存中。 –
@ JBNizet - 是的,我認爲這是一種複雜的,你認爲我可以使用某種類型的數組,並從那裏獲取數據,因爲返回數據的結構應該始終相同... –
@JohnJerrby:不。將對象轉換爲數組只會導致ClassCastException,因爲您的實體不是數組。通常通過在每個實體中實現一個toString()方法來解決這些問題。要麼你必須使用像這裏建議的反射,或者你必須測試你的實體的類型,並調用特定於該實體類型的方法來顯示它包含的數據。 –