我在我的项目中使用了一对多映射。我已经为每个用户存储了一个点击列表。 但是当我通过调用getClicks()方法检索列表时,Hibernate以不同的格式返回列表。 这样的事情。
"[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);
}
&#13;
但是当我打印新列表的项目时,它仍以相同的方式打印。
我需要从此列表的结果String中构建一个JSON。 因此,如果列表以格式返回,它将无法帮助我。
除How to pretty print Hibernate query results?
外,我无法找到任何相关信息我试过Arrays.ToString(Object 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);
&#13;
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;
}
&#13;
感谢任何帮助。
答案 0 :(得分:0)
您需要实现一个toString方法,因为您当前的Click类可能没有,所以它只是打印为类和实例标识符的名称。
答案 1 :(得分:0)
好的,我终于可以解决我的问题了。 我在没有任何注释的情况下创建了另一个POJO,并将List项目映射到该POJO类。 我认为问题在于我在原始POJO中的另一个类的映射的注释。
getString()方法也只能帮助改变标识符的格式。所以基本上它与JSON构建无关,除非你以JSON的形式格式化getString()。
希望它有所帮助。如果有人想要新的临时POJO,我可以根据要求发布它。 感谢。