2017-07-05 2 views
0

Je viens de commencer à apprendre JPA 2 et j'essaie de faire un affichage simple de mon contenu de table dans la console.Affichage JPA resultList dans la console

Voici comment ma méthode ressemble à:

public static List<Bronie> getListaBroni() { 

    EntityManager em = DatabaseHandler.getEntityManager(); 
    String qString = "SELECT b FROM Bronie b"; 

    TypedQuery<Bronie> q = em.createQuery(qString, Bronie.class); 

    result = q.getResultList(); 

    return result; 

} 

Je suis en train de l'afficher dans la console, mais le résultat que je reçois est:

Hibernate: select bronie0_.id as id1_1_, bronie0_.ilosc as ilosc2_1_, bronie0_.kaliber as kaliber3_1_, bronie0_.model_broni as model_br4_1_ from bronie bronie0_ 
[[email protected]] 

Jusqu'à présent, il n'y a qu'un seul objet la base de données, mais je ne vois pas l'intérêt de mettre plus d'entre eux pour cette question.

Je sais que je dois, en quelque sorte, diviser les objets que je reçois en parties qui représentent des colonnes différentes, mais je n'ai aucune idée de comment. Et comment éviter ce type d'affichage

[email protected] 

plus tard? Je ne sais pas si cela aide, mais je vais essayer de mettre la liste de résultats dans un TableView à la fin, donc je vais probablement devoir séparer chaque colonne de l'objet de toute façon.

Répondre

0

Chaque fois que vous essayez d'imprimer un objet, il appelle la méthode toString(). L'implémentation par défaut renvoie la classe d'objet et le hashcode. Donc, si vous voulez imprimer les données de l'objet Bronie vous devez @Override la méthode toString() dans votre classe.

@Override 
public String toString() { 
    return "Prop1: '" + this.prop1+ "', Prop2: '" + this.prop2+ "'....; 
} 
0

Je pense que votre classe devrait implémenter Serializable classe.

0

Je vois trois parties dans votre question:

Dans la première partie de votre question, vous affichez la requête SQL qui crée mise en veille prolongée pour interroger la base de données pour récupérer les lignes. Les noms de table et de colonne dynamiques sont étranges mais il s'agit d'un détail d'implémentation.

Dans la deuxième partie de votre question, vous parlez de la nécessité de séparer les colonnes. Vous ne devez pas séparer quoi que ce soit, votre requête va comme ceci:

  • Le gestionnaire d'entités lit la ligne de base de données
  • Instantiates et objet de la classe mappée et a demandé
  • Initialise les propriétés de l'objet avec données de la ligne

Troisième partie, l'impression d'un objet:

le résultat d'impression que vous montriez est la valeur par défaut, le nom de classe avec l'adresse dans le monde virtuel Machine. Comme d'autres le disent, vous pouvez remplacer la méthode toString pour changer le comportement par défaut, et imprimer par défaut comme vous le souhaitez. S'il vous plaît envisager l'impression par défaut quelque chose d'interne et créer des méthodes personnalisées pour les utilisateurs finaux ou d'impression.