JPA:由于从客户端传递给服务器的值不正确,无法保持记录 [英] JPA : Not able to persist record due to incorrect values being passed from client to server

查看:136
本文介绍了JPA:由于从客户端传递给服务器的值不正确,无法保持记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下实体关系



雇主实体

  @Entity 
@Table(name =EMP,schema =SCOTT

@XmlRootElement
@NamedQueries({
@NamedQuery(name =Emp.findAllEmployees,query =select e from Emp e left
join fetch e.deptNo order by e.empno desc)
})
public class Emp实现java.io.Serializable {
@Id
@Column(name =EMPNO,unique = true,nullable = false,precision = 4,
scale = 0)
私人短头条
@ManyToOne
@JoinColumn(name =DEPTNO,referencedColumnName =DEPTNO)
private Dept deptNo;

部门实体

  @Entity 
@Table(name =DEPT,schema =SCOTT

@XmlRootElement
public class Dept实现java.io.Serializable {
@Id
@Column(name =DEPTNO,unique = true,nullable = false,precision = 2,
scale = 0)
私人短期部门;
@OneToMany(fetch = FetchType.LAZY,mappedBy =deptNo)
@XmlTransient
private Set< Emp> empDeptno;

泽西岛REST代码

  @POST 
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public void create(Emp emp){
log.info(deptNo+ emp.getDeptNo()。getDeptNo());
getEmployeeService()。create(emp);
}

执行getAllEmployees()方法时,以下JSON从服务器返回



$ p $ {emp:[{dept:{deptNo:10,dname:ACCOUNTING loc:
NEW YORK},empno:7934,ename:MILLER,hiredate:
1982-01-23T00:00:00 + 00,job:CLERK,mgr:7782,sal:1300},
{dept:
{deptNo:20, dname:RESEARCH,loc:DALLAS},empno:7902,ename:
FORD,
hiredate: 03:00:00 + 03:00,job:ANALYST,mgr:7566,sal:
3000},{dept:
{ deptNo:30,dname:SALES,loc:CHICAGO},empno:7900,ename:
JAMES,hiredate b $ b1981-12-03T00:00:00 + 03:00,job:CLERK,mgr:7698,sal:950},
{ deamp:{deptNo:20,dname:RESEARCH,loc:DALLAS},empno:7876,
ename:
ADAMS,hiredate:
1987-05-23T00:00:00 + 03:00,job:CLERK,mgr:7788,sal:1100 },
{comm:0,dept:
{dep tNo:30,dname:SALES,loc:CHICAGO},empno:7844,ename:
TURNER,hiredate $ b1981-09-08T00:00:00 + 03:00,job:SALESMAN,mgr:7698,sal:1500},
{dept :{deptNo:10,dname:ACCOUNTING,loc:
NEW YORK},empno:7839,ename:KING hiredate:
1981-11-17T00:00:00 + 03:00,job:PRESIDENT,sal:5000},
{dept: deptNo:20,dname:RESEARCH,loc:DALLAS},empno:7788,
ename:SCOTT,hiredate $ b1987-04-19T00:00:00 + 03:00,job:ANALYST,mgr:7566,sal:3000},
{dept :{deptNo:10,dname:ACCOUNTING,loc:
NEW YORK},empno:7782,ename:CLARK hiredate:
1981-06-09T00:00:00 + 03:00,job:MANAGER,mgr:7839,sal:2450},
{dept:deptNo:30,dname:SALES,loc:CHICAGO},empno:7698,
ename:
BLAKE,hiredate:
1981-05-01T00:00:00 + 03:00,job:MANAGER,mgr:7839,sal: 2850},
{comm:1400,dept :
{deptNo:30,dname:SALES,loc:CHICAGO},empno:7654,ename:
MARTIN ,hiredate:
1981-09-28T00:00:00 + 03:00,job:SALESMAN,mgr:7698,sal:1250} ,
{dept:
{deptNo:20,dname:RESEARCH,loc:DALLAS},empno:7566, :
JONES,hiredate:
1981-04-02T00:00:00 + 03:00,job:MANAGER,mgr:7839, sal:2975},
{comm:500,dept:
{deptNo:30,dname:SALES :CHICAGO},empno:7521,ename:
WARD,hiredate:
1981-02-22T00:00:00 + 03:00, job:SALESMAN,mgr:7698,sal:1250},
{comm:300,dept:
{deptNo :30,dname:SALES,loc:CHICAGO},empno:7499,
ename:
ALLEN,hiredate: 1981-02-20T00:00:00 + 03:00,job:SALESMAN,mgr:
7698,
sal:1600}, dept:
{deptNo:20,dname:RESEARCH,loc:DALLAS},empno:7369,ename:
SMITH,hiredate:
1980-12-1 7T00:00:00 + 03:00,job:CLERK,mgr:7902,sal:800}]}
pre>

我正面临的问题是,当我尝试创建新记录时,即使从浏览器传递的内容是20,deptNo也是0。



创建新记录的代码片段。

  $(document).ready(function ){
$(#btnSubmit)。click(function(){
$ .ajax({
url:http:// localhost:8181 / Test1 / rest / employee / ,
type:POST,
dataType:'json',
contentType:application / json,
data:'{empno:9004,
ename:JILL,job:CS,mgr:1111,sal:800,comm:202,deptNo:20 }',
})
});
});

从浏览器传来的资料

  {empno:9004,
ename:JILL,job:CS,mgr:1111,sal 800,comm:202,deptNo:20}

在服务器接收时, deptNo 是否为零?



如何解决此问题?

解决方案

请参阅Json格式问题继续这篇文章的相同问题

将JSON数据转换为Java对象


I have the following Entity relationship

Emp Entity

@Entity
@Table(name = "EMP", schema = "SCOTT"
)
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Emp.findAllEmployees", query = "select e from Emp e left 
    join fetch e.deptNo order by e.empno desc")
})
public class Emp implements java.io.Serializable {
@Id
@Column(name = "EMPNO", unique = true, nullable = false, precision = 4,
scale = 0)
private short empno;
@ManyToOne
@JoinColumn(name = "DEPTNO", referencedColumnName = "DEPTNO")
private Dept deptNo;

Dept Entity

@Entity
@Table(name = "DEPT", schema = "SCOTT"
)
@XmlRootElement
public class Dept implements java.io.Serializable {
@Id
@Column(name = "DEPTNO", unique = true, nullable = false, precision = 2,
scale = 0)
private short deptNo;
@OneToMany(fetch=FetchType.LAZY,mappedBy = "deptNo")
@XmlTransient
private Set<Emp> empDeptno;

Jersey REST code

@POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public void create(Emp emp) {
         log.info("deptNo "+emp.getDeptNo().getDeptNo());
         getEmployeeService().create(emp);
    }

The following JSON return from server when I execute getAllEmployees() method

  {"emp":[{"dept":{"deptNo":"10","dname":"ACCOUNTING","loc": 
  "NEW YORK"},"empno":"7934","ename":"MILLER","hiredate":
  "1982-01-23T00:00:00+03:00","job":"CLERK","mgr":"7782","sal":"1300"},
  {"dept":
  {"deptNo":"20","dname":"RESEARCH","loc":"DALLAS"},"empno":"7902","ename":
  "FORD",
  "hiredate":"1981-12-03T00:00:00+03:00","job":"ANALYST","mgr":"7566","sal":
  "3000"},{"dept": 
  {"deptNo":"30","dname":"SALES","loc":"CHICAGO"},"empno":"7900","ename":
  "JAMES", "hiredate":
  "1981-12-03T00:00:00+03:00","job":"CLERK","mgr":"7698","sal":"950"},
  {"dept":{"deptNo":"20","dname":"RESEARCH","loc":"DALLAS"},"empno":"7876",
  "ename":
  "ADAMS","hiredate":
  "1987-05-23T00:00:00+03:00","job":"CLERK","mgr":"7788","sal":"1100"},
  {"comm":"0","dept":      
  {"deptNo":"30","dname":"SALES","loc":"CHICAGO"},"empno":"7844","ename":
  "TURNER","hiredate":
  "1981-09-08T00:00:00+03:00","job":"SALESMAN","mgr":"7698","sal":"1500"},
  {"dept":{"deptNo":"10","dname":"ACCOUNTING","loc":
  "NEW YORK"},"empno":"7839","ename":"KING","hiredate":
  "1981-11-17T00:00:00+03:00","job":"PRESIDENT","sal":"5000"},         
  {"dept":"deptNo":"20","dname":"RESEARCH","loc":"DALLAS"},"empno":"7788",
  "ename":"SCOTT","hiredate":
  "1987-04-19T00:00:00+03:00","job":"ANALYST","mgr":"7566","sal":"3000"},
   {"dept":{"deptNo":"10","dname":"ACCOUNTING","loc":
   "NEW YORK"},"empno":"7782","ename":"CLARK","hiredate":
   "1981-06-09T00:00:00+03:00","job":"MANAGER","mgr":"7839","sal":"2450"},
   {"dept":"deptNo":"30","dname":"SALES","loc":"CHICAGO"},"empno":"7698",
   "ename":
    "BLAKE","hiredate":
   "1981-05-01T00:00:00+03:00","job":"MANAGER","mgr":"7839","sal":"2850"},
   {"comm":"1400","dept": 
   {"deptNo":"30","dname":"SALES","loc":"CHICAGO"},"empno":"7654","ename":
    "MARTIN","hiredate":
   "1981-09-28T00:00:00+03:00","job":"SALESMAN","mgr":"7698","sal":"1250"},
   {"dept":
   {"deptNo":"20","dname":"RESEARCH","loc":"DALLAS"},"empno":"7566","ename": 
    "JONES","hiredate":
   "1981-04-02T00:00:00+03:00","job":"MANAGER","mgr":"7839","sal":"2975"},
   {"comm":"500","dept": 
   {"deptNo":"30","dname":"SALES","loc":"CHICAGO"},"empno":"7521","ename":
   "WARD", "hiredate":
   "1981-02-22T00:00:00+03:00","job":"SALESMAN","mgr":"7698","sal":"1250"},
    {"comm":"300","dept":
    {"deptNo":"30","dname":"SALES","loc":"CHICAGO"},"empno":"7499",
   "ename":
   "ALLEN","hiredate":"1981-02-20T00:00:00+03:00","job":"SALESMAN","mgr":
   "7698",
   "sal":"1600"},{"dept":
   {"deptNo":"20","dname":"RESEARCH","loc":"DALLAS"},"empno":"7369","ename":
    "SMITH","hiredate":
   "1980-12-17T00:00:00+03:00","job":"CLERK","mgr":"7902","sal":"800"}]}

The problem I am facing is when I tried to create a new record, deptNo is 0 even though what is passed from browser is 20.

Code snippet for creating a new record.

   $(document).ready(function () {
    $("#btnSubmit").click(function () {
    $.ajax({
        url: "http://localhost:8181/Test1/rest/employee/",
        type: "POST",
        dataType: 'json',
        contentType: "application/json",
        data: '{"empno":"9004",
     "ename":"JILL","job":"CS","mgr":"1111","sal":"800","comm":"202","deptNo":"20"}',
    })
     });
    });

Data being passed from browser

{"empno":"9004",
"ename":"JILL","job":"CS","mgr":"1111","sal":"800","comm":"202","deptNo":"20"}

What could be the reason deptNo is zero when being received in server?

How can I resolve the issue?

解决方案

See Json format problem same issue that is continuation of this post

JSON data convert to Java Object

这篇关于JPA:由于从客户端传递给服务器的值不正确,无法保持记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆