2016-10-18 4 views
0

Ich habe in meinem Projekt Eins-zu-Viele-Zuordnung verwendet. Ich habe eine Liste von Klicks für jeden Benutzer gespeichert. Aber wenn ich die Liste durch Aufruf von getClicks() -Methode abrufen Hibernate gibt die Liste in einem anderen Format zurück. So etwas wie das.Hibernate-Eins-zu-Viele-Zuordnung, Drucken von Mapped-Listen

So versuchte ich, jeden Wert aus der Liste lesen und zu einer neuen Liste zuweisen.

List<Click> clicks=new ArrayList<Click>();  
 
      for(Click c: e.getClicks()){ 
 
     \t Click temp = new Click(); 
 
     \t temp.setAff_source(c.getAff_source()); 
 
     \t temp.setCb_to_award(c.getCb_to_award()); 
 
     \t temp.setCb_type(c.getCb_type());  
 
     \t clicks.add(temp);   \t 
 
      }

Aber wenn ich die Elemente der neuen Liste drucken stillt er druckt die gleiche Weise.

Ich muss ein JSON aus dem resultierenden String dieser Liste erstellen. Also wenn die Liste im Format zurückgegeben wird, wird es mir nicht helfen.

Ich konnte nichts bezüglich dieser Ausnahme finden How to pretty print Hibernate query results?

Ich versuchte Arrays.ToString (Object o). Aber es funktioniert nicht.

Gson builder Teil

Gson gson = new GsonBuilder() 
 
\t \t   .registerTypeAdapter(Click.class, new MyTypeAdapter<Click>()) 
 
\t \t   .create(); 
 
List<Click> clicks=new ArrayList<Click>();  
 
      for(Click c: e.getClicks()){ 
 
     \t Click temp = new Click(); 
 
     \t temp.setAff_source(c.getAff_source()); 
 
     \t temp.setCb_to_award(c.getCb_to_award()); 
 
     \t temp.setCb_type(c.getCb_type()); 
 
     \t temp.setCom_to_recieve(c.getCom_to_recieve()); 
 
     \t temp.setStore_name(c.getStore_name()); 
 
     \t temp.setT_date(c.getT_date()); 
 
     \t temp.setT_status(c.getT_status()); 
 
     \t temp.setT_ticket(c.getT_ticket()); 
 
     \t temp.setUid(c.getUid()); 
 
     \t System.out.println(c.toString()); 
 
     \t clicks.add(temp);   \t 
 
      } 
 
      String json = gson.toJson(clicks, Click.class);

Click.java

@Entity 
 
@Table(name="click") 
 
public class Click { 
 
\t 
 
\t @Id 
 
\t @Column(name="t_ticket") 
 
\t private String t_ticket; 
 
\t 
 
\t @Column(name="uid",nullable=false) 
 
\t private long uid; 
 
\t 
 
\t public long getUid() { 
 
\t \t return uid; 
 
\t } 
 

 
\t public void setUid(long uid) { 
 
\t \t this.uid = uid; 
 
\t } 
 

 
\t @ManyToOne 
 
\t @JoinColumn(name="uid", 
 
\t \t \t \t insertable=false, updatable=false, 
 
\t \t \t \t nullable=false) 
 
\t private Earning earning; 
 
\t 
 
\t @Column(name="store_name") 
 
\t private String store_name; 
 
\t 
 
\t @Column(name="t_status") 
 
\t private String t_status; 
 
\t 
 
\t @Column(name="aff_source") 
 
\t private String aff_source; 
 
\t 
 
\t @Column(name="com_to_recieve") 
 
\t private float com_to_recieve; 
 
\t 
 
\t @Column(name="t_date") 
 
\t private Date t_date; 
 
\t 
 
\t @Column(name="cb_to_award") 
 
\t private float cb_to_award; 
 
\t 
 
\t @Column(name="cb_type") 
 
\t private String cb_type; 
 

 
\t public String getT_ticket() { 
 
\t \t return t_ticket; 
 
\t } 
 

 
\t public void setT_ticket(String t_ticket) { 
 
\t \t this.t_ticket = t_ticket; 
 
\t } 
 

 
\t 
 

 
\t public Earning getEarning() { 
 
\t \t return earning; 
 
\t } 
 

 
\t public void setEarning(Earning earning) { 
 
\t \t this.earning = earning; 
 
\t } 
 

 
\t public String getStore_name() { 
 
\t \t return store_name; 
 
\t } 
 

 
\t public void setStore_name(String store_name) { 
 
\t \t this.store_name = store_name; 
 
\t } 
 

 
\t public String getT_status() { 
 
\t \t return t_status; 
 
\t } 
 

 
\t public void setT_status(String t_status) { 
 
\t \t this.t_status = t_status; 
 
\t } 
 

 
\t public String getAff_source() { 
 
\t \t return aff_source; 
 
\t } 
 

 
\t public void setAff_source(String aff_source) { 
 
\t \t this.aff_source = aff_source; 
 
\t } 
 

 
\t public float getCom_to_recieve() { 
 
\t \t return com_to_recieve; 
 
\t } 
 

 
\t public void setCom_to_recieve(float com_to_recieve) { 
 
\t \t this.com_to_recieve = com_to_recieve; 
 
\t } 
 

 
\t public Date getT_date() { 
 
\t \t return t_date; 
 
\t } 
 

 
\t public void setT_date(Date t_date) { 
 
\t \t this.t_date = t_date; 
 
\t } 
 

 
\t public float getCb_to_award() { 
 
\t \t return cb_to_award; 
 
\t } 
 

 
\t public void setCb_to_award(float cb_to_award) { 
 
\t \t this.cb_to_award = cb_to_award; 
 
\t } 
 

 
\t public String getCb_type() { 
 
\t \t return cb_type; 
 
\t } 
 

 
\t public void setCb_type(String cb_type) { 
 
\t \t this.cb_type = cb_type; 
 
\t }

Jede Hilfe sehr geschätzt wird.

+0

Mögliches Duplikat von [Wie drucke ich mein Java-Objekt, ohne "SomeType @ 2f92e0f4" zu erhalten?] (Http://stackoverflow.com/questions/29140402/how-doi-i-print-my-java-object- ohne zu bekommen-somethype2f92e0f4) –

+0

@AlanHay Danke für den Link. –

+0

OK, aber nicht auf toString() für App-Logik verlassen. Verwenden Sie eine Bibliothek wie Jackson, um das Objekt einfach in Json zu konvertieren und umgekehrt. http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/ –

Antwort

0

Okay, ich könnte mein Problem endlich lösen. Ich machte ein weiteres POJO ohne Anmerkungen und ordnete die Listenelemente dieser POJO-Klasse zu. Ich denke, das Problem war mit Annotation des Mappings auf einer anderen Klasse, die ich im ursprünglichen POJO hatte.

Auch getString() -Methode hilft nur bei der Änderung des Formats der Kennung. Im Grunde genommen hat es nichts mit JSON-Erstellung zu tun, es sei denn, Sie formatieren getString() in Form von JSON.

Ich hoffe, es hilft. Wenn jemand neue POJO-Tempos möchte, kann ich es bei Bedarf posten. Danke.

0

Sie müssen eine toString-Methode implementieren, da Ihre aktuelle Click-Klasse wahrscheinlich keine hat. Daher wird sie nur als Name der Klassen- und Instanz-ID ausgegeben.

+0

Danke für die Antwort. toString Methode erlaubt mir nur das Format der Objektkennung richtig zu ändern? Ich benutze GSON für json building. Ich gebe das korrekte JSON-Array (Schlüsselwertpaare) für andere Listen zurück, gibt aber "[[email protected]]" für die zugeordnete Liste zurück. –

+0

toString ändert nur das Bezeichnerformat, aber es gibt keinen Effekt beim JSON-Aufbau. –

+0

Es ändert, was auch immer ausgegeben wird - Sie können einen JSON-Builder in Ihrer toString-Methode verwenden, um das Objekt in eine JSON-Zeichenfolge zu konvertieren, wenn toString aufgerufen wird. –