2016-10-18 7 views
0

В моем проекте я использовал отображение «один-ко-многим». Я сохранил список кликов для каждого пользователя. Но когда я получаю список, вызывая метод getClicks(), Hibernate возвращает список в другом формате. Что-то вроде этого.Hibernate One-to-Many Mapping, распечатываемые списки

Так что я попытался Чтение каждого значения из списка и назначить новый список.

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 
 
      }

Но когда я напечатать элементы нового списка это кадры из фильма печатает один и тот же путь.

Мне нужно построить JSON из результирующей строки этого списка. Итак, если список возвращается в формате, он не поможет мне.

Я не мог найти ничего относительно этого, кроме How to pretty print Hibernate query results?

Я попытался Arrays.ToString (Object о). Но это не сработает.

GSON строитель по совместительству

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 }

Любая помощь приветствуется.

+0

Возможный дубликат [Как распечатать объект Java без получения «SomeType @ 2f92e0f4»?] (Http://stackoverflow.com/questions/29140402/how-do-i-print-my-java-object- без-получения-sometype2f92e0f4) –

+0

@AlanHay Спасибо за ссылку. –

+0

ОК, но не полагайтесь на toString() для логики приложения. Используйте библиотеку, такую ​​как Джексон, чтобы легко преобразовать объект в Json и наоборот. http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/ –

ответ

0

Хорошо, я мог бы решить мою проблему в конце концов. Я сделал еще одно POJO без каких-либо аннотаций и сопоставил элементы List этому классу POJO. Я думаю, что проблема была связана с аннотацией сопоставления на другом классе, который у меня был в оригинальном POJO.

Также метод getString() помогает только в изменении формата идентификатора. Таким образом, в основном это не имеет никакого отношения к зданию JSON, если вы не форматируете getString() в форме JSON.

Надеюсь, это поможет. Если кто-то хочет новый темп POJO, я могу опубликовать его, если потребуется. Спасибо.

0

Вам необходимо реализовать метод toString, так как текущий класс Click не имеет его, поэтому он просто печатает как имя идентификатора класса и экземпляра.

+0

Спасибо за ответ. Метод toString позволит мне только изменить формат идентификатора объекта? Я использую GSON для построения json. Я возвращаю правильный массив JSON (пары ключевых значений) для других списков, но возвращает «[[email protected]]» для сопоставленного списка. –

+0

toString просто меняет формат идентификатора, но в здании JSON нет никакого эффекта. –

+0

Он изменяет все, что выводится - вы можете использовать построитель JSON в вашем методе toString для преобразования объекта в строку JSON, когда вызывается toString. –