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

时间:2016-10-18 19:54:25

标签: java json hibernate one-to-many hibernate-onetomany

我在我的项目中使用了一对多映射。我已经为每个用户存储了一个点击列表。 但是当我通过调用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;
&#13;
&#13;

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

我需要从此列表的结果String中构建一个JSON。  因此,如果列表以格式返回,它将无法帮助我。

How to pretty print Hibernate query results?

外,我无法找到任何相关信息

我试过Arrays.ToString(Object o)。但它没有用。

GSON构建器部分 -

&#13;
&#13;
 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;
&#13;
&#13;

Click.java

&#13;
&#13;
@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;
&#13;
&#13;

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好的,我终于可以解决我的问题了。 我在没有任何注释的情况下创建了另一个POJO,并将List项目映射到该POJO类。 我认为问题在于我在原始POJO中的另一个类的映射的注释。

getString()方法也只能帮助改变标识符的格式。所以基本上它与JSON构建无关,除非你以JSON的形式格式化getString()。

希望它有所帮助。如果有人想要新的临时POJO,我可以根据要求发布它。 感谢。