2017-10-21 107 views
0

我试图将数据插入到数据库 我输入JSON:无法使用JPA一个子表内其父一起插入子数据很多映射

{ 
    "loop_ind": "TERM", 
    "callRedirectRicTgrpDetailsList": [{ 
     "ric": "RIC1", 
     "tgrp": "TGRP1", 
     "priority": 1 
    },{ 
     "ric": "RICX2", 
     "tgrp": "TGRP2", 
     "priority": 2 
    }] 
} 

和URL我送一个更值redirect_id 像“http://127.0.0.1:8080/myredirect/redirect/1080/” 这里redirect_id是1080

所以redirect_id和loop_ind是常见的callRedirectRicTgrpDetailsList实体。这意味着与父实体相关的loop_ind和redirect_id,而callRedirectRicTgrpDetailsList是子实体。

当我尝试插入上述细节时,第一个列表成功插入[1080,TERM,RIC1,TGRP1,1]。第二个列表[1080,TERM,RIC2,TGRP2,2]没有插入。由于redirect_id为null.1080被分配给第一个列表,第二个列表显示为空。

数据库模式:

CREATE TABLE IF NOT EXISTS `callRedirect` (
`redirect_id` varchar(20) NOT NULL, 
`loop_ind` varchar(4) NOT NULL, 
PRIMARY KEY (`redirect_id`) 
); 

CREATE TABLE IF NOT EXISTS `callRedirect_ric_tgrp_details` (
`row_id` int(4) AUTO_INCREMENT, 
`redirect_id` varchar(20) NOT NULL, 
`ric` varchar(20) NOT NULL, 
`tgrp` varchar (20) NOT NULL, 
`priority` int NOT NULL, 
PRIMARY KEY (`row_id`) 
); 

在dao.java:

callRedirectList.setRedirect_id(redirect_id.trim()); //which is from URL 
entityManager.getTransaction().begin(); 
entityManager.merge(callRedirectList); 
entityManager.getTransaction().commit(); 

Callredirect.java:

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Cacheable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.QueryHint; 
import javax.persistence.Table; 

import org.codehaus.jackson.annotate.JsonIgnore; 
import org.codehaus.jackson.annotate.JsonProperty; 
import org.eclipse.persistence.annotations.CascadeOnDelete; 
import org.eclipse.persistence.annotations.PrivateOwned; 



@Entity 
@Cacheable(false) 
@NamedQueries({ 
    @NamedQuery(name = "getCallRedirectById", query = "SELECT a FROM CallRedirect a WHERE a.redirect_id=:redirect_id", hints = @QueryHint(name = "eclipselink.refresh", value = "true")), 
    @NamedQuery(name = "getAllCallRedirect", query = "SELECT a FROM CallRedirect a order by a.redirect_id", hints = @QueryHint(name = "eclipselink.refresh", value = "true")) }) 

@Table(name = "CallRedirect") 
public class CallRedirect implements java.io.Serializable{ 


private static final long serialVersionUID = 1L; 

@Id 
@Column(name = "redirect_id") 
@JsonProperty("redirect_id") 
private String redirect_id; 

@Column(name = "loop_ind") 
@JsonProperty("loop_ind") 
private String loop_ind; 

@OneToMany(mappedBy = "callRedirect", cascade = {CascadeType.PERSIST,CascadeType.REMOVE}, fetch = FetchType.LAZY) 
@CascadeOnDelete 
/*@JoinColumn(name = "redirect_id") */ 
private List<CallRedirectRicTgrpDetails> callRedirectRicTgrpDetailsList; 


public CallRedirect(){ 
} 
public CallRedirect(String redirect_id, String loop_ind,List<CallRedirectRicTgrpDetails> callRedirectRicTgrpDetailsList){ 
    this.redirect_id = redirect_id; 
    this.loop_ind = loop_ind; 
    this.callRedirectRicTgrpDetailsList = callRedirectRicTgrpDetailsList; 
} 

public String getLoop_ind() 
{ 
    return loop_ind.trim(); 
} 

public void setLoop_ind(String loop_ind) 
{ 
    this.loop_ind = loop_ind.trim(); 
} 

public List<CallRedirectRicTgrpDetails> getCallRedirectRicTgrpDetailsList() 
{ 
    return this.callRedirectRicTgrpDetailsList; 
} 

public void setCallRedirectRicTgrpDetailsList(List<CallRedirectRicTgrpDetails> callRedirectRicTgrpDetails) 
{ 
    this.callRedirectRicTgrpDetailsList= callRedirectRicTgrpDetails; 
} 

/** 
* @return the redirectId 
*/ 
public String getRedirect_id() 
{ 
    return redirect_id.trim(); 
} 

/** 
* @param redirectId 
*   the redirectId to set 
*/ 
public void setRedirect_id(String redirect_id) 
{ 
    this.redirect_id = redirect_id.trim(); 
} 

@Override 
public String toString() 
{ 
    return "CallRedirect :: redirect_id: " + redirect_id + ", loop_ind : " 
      + loop_ind +", Ric_Tgrp Details : " + callRedirectRicTgrpDetailsList; 
} 

} 

CallRedirectRicTgrpDetails.java:

import javax.persistence.Cacheable; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.QueryHint; 
import javax.persistence.Table; 

import org.codehaus.jackson.annotate.JsonIgnore; 
import org.codehaus.jackson.annotate.JsonProperty; 


@Entity 
@Cacheable(false) 
@NamedQueries({ 
     @NamedQuery(name = "getCallRedirectDetailsById", query = "SELECT a FROM CallRedirectRicTgrpDetails a WHERE a.callRedirect.redirect_id=:redirect_id ORDER BY a.priority", hints = @QueryHint(name = "eclipselink.refresh", value = "true")), 
     @NamedQuery(name = "getAllCallRedirectDetails", query = "SELECT a FROM CallRedirectRicTgrpDetails a ORDER BY a.priority", hints = @QueryHint(name = "eclipselink.refresh", value = "true")) }) 

@Table(name = "CallRedirect_ric_tgrp_details") 
public class CallRedirectRicTgrpDetails implements java.io.Serializable{ 


    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "row_id") 
    private int id; 

    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.REMOVE}) 
    //@JoinColumn(name = "redirect_id",insertable=false, updatable=false) 
    @JoinColumn(name = "redirect_id") 

    private CallRedirect callRedirect; 


    @Column(name = "ric") 
    @JsonProperty("ric") 
    private String ric; 

    @Column(name = "tgrp") 
    @JsonProperty("tgrp") 
    private String tgrp; 

    @Column(name = "priority") 
    @JsonProperty("priority") 
    private int priority; 
    public CallRedirectRicTgrpDetails(){ 

    } 
    public CallRedirectRicTgrpDetails(int priority, int id, String ric, String tgrp){ 
     this.priority = priority; 
     this.id = id; 
     this.ric = ric; 
     this.tgrp = tgrp; 
    } 
    @JsonIgnore 
    public CallRedirect getCallRedirect() 
    { 
     return this.callRedirect; 
    } 
    @JsonProperty 
    public void setCallRedirect(CallRedirect callRedirect) 
    { 
     this.callRedirect = callRedirect; 
     if (!this.callRedirect.getCallRedirectRicTgrpDetailsList().contains(this)) { 
      this.callRedirect.getCallRedirectRicTgrpDetailsList().add(this); 
     } 
    } 

    /** 
    * @return the ric 
    */ 
    public String getRic() 
    { 
     return ric.trim(); 
    } 

    /** 
    * @param ric 
    *   the ric to set 
    */ 
    public void setRic(String ric) 
    { 
     this.ric = ric.trim(); 
    } 

    /** 
    * @return the tgrp 
    */ 
    public String getTgrp() 
    { 
     return tgrp.trim(); 
    } 

    /** 
    * @param tgrp 
    *   the tgrp to set 
    */ 
    public void setTgrp(String tgrp) 
    { 
     this.tgrp = tgrp.trim(); 
    } 

    public int getId() 
    { 
     return id; 
    } 

    public void setId(int id) 
    { 
     this.id = id; 
    } 

    public int getPriority() 
    { 
     return priority; 
    } 

    public void setPriority(int priority) 
    { 
     this.priority = priority; 
    } 

    /*@Override 
    public String toString() 
    { 
     return "CallRedirectRicTgrpDetails ::RowId : " + id + ", RedirectId : " + callRedirect.getRedirect_id() + ", Ric : " + ric + ", Tgrp : " + tgrp 
       + ", Priority : " + priority; 
    }*/ 

} 
+0

有什么建议吗? – karthick

+0

json:''ric“:”RICX2“与'RIC2',错字?编辑json如果是。 – pirho

回答

0

看起来您可能无法访问所有子对象并调用setCallRedirect。级联魔术不适合你

相关问题