Hibernate 一对多映射,打印映射列表

Hibernate One-To-Many Mapping, printing mapped lists

我在我的项目中使用了一对多映射。我为每个用户存储了一个点击列表。 但是当我通过调用 getClicks() 方法检索列表时,Hibernate returns 列表以不同的格式显示。 像这样。

"[com.zednx.tech.persistence.Click@29df9a77]"

所以我尝试读取列表中的每个值并分配给一个新列表。

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

但是当我打印新列表的项目时,它仍然以相同的方式打印。

我需要从这个列表的结果字符串中构建一个 JSON。 所以如果列表以格式返回,它不会帮助我。

How to pretty print Hibernate query results?

外,我找不到任何相关信息

我尝试了 Arrays.ToString(对象 o)。但是没用。

GSON 构建器部分-

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

Click.java

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

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

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

 public String getT_ticket() {
  return t_ticket;
 }

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

 

 public Earning getEarning() {
  return earning;
 }

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

 public String getStore_name() {
  return store_name;
 }

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

 public String getT_status() {
  return t_status;
 }

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

 public String getAff_source() {
  return aff_source;
 }

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

 public float getCom_to_recieve() {
  return com_to_recieve;
 }

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

 public Date getT_date() {
  return t_date;
 }

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

 public float getCb_to_award() {
  return cb_to_award;
 }

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

 public String getCb_type() {
  return cb_type;
 }

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

感谢任何帮助。

您需要实现一个 toString 方法,因为您当前的 Click class 可能没有,所以它只打印 class 的名称和实例标识符。

好的,我终于可以解决我的问题了。 我制作了另一个没有任何注释的 POJO,并将列表项映射到该 POJO class。 我认为问题出在我在原始 POJO 中的另一个 class 上的映射注释。

此外,getString() 方法仅有助于更改标识符的格式。所以基本上它与 JSON 构建无关,除非你以 JSON.

的形式格式化 getString()

希望对您有所帮助。如果有人想要我制作的新临时 POJO,我可以 post 如果需要的话。 谢谢。