【发布时间】:2016-10-18 19:54:24
【问题描述】:
我在我的项目中使用了一对多映射。我为每个用户存储了一个点击列表。 但是当我通过调用 getClicks() 方法检索列表时,休眠返回不同格式的列表。 像这样。
"[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(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);
点击.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;
}
感谢任何帮助。
【问题讨论】:
-
@AlanHay 感谢您的链接。
-
可以,但不要依赖 toString () 来处理应用程序逻辑。使用诸如 Jackson 之类的库可以轻松地将对象转换为 Json,反之亦然。 mkyong.com/java/jackson-2-convert-java-object-to-from-json
-
我为此目的使用 GSON。 GSON 为其他手动构建的列表构建正确的键值 JSON 数组,但仅在这种情况下(映射列表),它没有键值对,但它有这些列表.."[com.zednx.tech.persistence .Click@29df9a77]"
-
Click对象到“com.zednx.tech.persistence.Click@29df9a77”的转换正在由您的MyTypeAdapter类完成。请显示该类的代码。另外,如果您删除自定义类型适配器的注册,会发生什么情况?
标签: java json hibernate one-to-many hibernate-onetomany