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 如果需要的话。
谢谢。
我在我的项目中使用了一对多映射。我为每个用户存储了一个点击列表。 但是当我通过调用 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 如果需要的话。 谢谢。