2013-06-01 3 views
-1

Im используя следующий код, чтобы получить данные из класса JPAраспечатывать отдельные поля из ToString()

factory = Persistence.createEntityManagerFactory("abc"); 
     EntityManager entityManager = factory.createEntityManager(); 

    classList.add("pack.Person"); 

    for (Object classOjc : classList) { 

     String className = classOjc.toString(); 

     Query query = entityManager.createQuery("SELECT p FROM " + className + " p"); 

     @SuppressWarnings("rawtypes") 
     List resultList = query.getResultList(); 

     System.out.println(resultList.size()); 

     for (Object result : resultList) { 

      System.out.println(result.toString()); 
     } 
    } 
} 



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], 

класса является

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 

    private String firstName; 
    private String lastName; 

@Override 
public String toString() { 
    return "Person [firstName=" + firstName + ", lastName=" + lastName + 
      "]"; 


.... 

моим вопрос предположит, что результат переопределения как следующее (укажите все атрибут и имя класса), есть способ

Поскольку я переопределяю toString() класса человека, печать выглядит следующим образом, но мой вопрос есть способ печати, например, только имена полей или только значения (предположим, что я не могу изменить строку в строке, и она должна быть одинаковой для каждого класса) проблема в том, что я могу получить любой класс, так что Я могу привести результат к человеку, например,

+1

Если вы не знаете, что такое входящий класс, и вы не хотите бросать, то единственным средством обращения является отражение. –

+0

Что вы пытаетесь спросить? В предложении, которое начинается «Мой вопрос ...», никогда не возникает вопрос. –

ответ

1

Вы можете с рефлексией toString с данным кодом Class, не зная его тип.

Просто петля над ней декларируется поля и получить их значения:

public static String myMagicToString(final Object in) throws IllegalArgumentException, IllegalAccessException { 
    final StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.append(in.getClass().getSimpleName()). 
      append(" ["); 
    for (final Field field : in.getClass().getDeclaredFields()) { 
     field.setAccessible(true); 
     stringBuilder.append(field.getName()). 
       append("="). 
       append(field.get(in)). 
       append(","); 
    } 
    stringBuilder.deleteCharAt(stringBuilder.length() - 1); 
    stringBuilder.append("]"); 
    return stringBuilder.toString(); 
} 

Этот пример печатает тот же формат, как вы описали, но вам просто нужно изменить конкатенации, и вы можете легко изменить формат.

+0

HI Boris, когда я использую ваш код, я получаю метаданные класса, такие как Person [id = 0, firstName = null, lastName = null, double1 = 0.0], но я хочу совместить значение с результатом, полученным от запроса, до значения поля, как я могу это сделать? –

+1

Я не понимаю, что вы имеете в виду. Если вы хотите отфильтровать значения по некоторым критериям, вы можете передать обратный вызов, например [Predicate] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Predicate .html) и проверьте, соответствует ли имя поля критериям или нет. –

+0

Мне нужно взять строку результатов и создать из нее объект, который содержит имя сущности и список соответствующих полей и значений, так как я могу взять его из строки результата, например, если из третьего списка я хочу напечатать только последнее имя = lastName 3 как я должен это делать? –

1

Почему бы вам не добавить несколько методов toString в соответствии с вашими потребностями. Или напишите один метод с списком атрибутов, который вы хотите распечатать.

+0

Можете ли вы привести пример того, как печатать несколько toString и как обращаться к нему в инструкции for.Thanks –

Смежные вопросы