无法从Spring Hibernate中获取json中的manytoone映射对象 [英] unable to get manytoone mapping object in json, from Spring Hibernate
问题描述
工作人员班级
@Entity
@Table(name = "staff", catalog = "nibblrdw_collections")
public class Staff implements java.io.Serializable {
private Integer id;
private StafRole stafRole;
private String stfId;
@NotEmpty(message="please enter staff name")
private String stfName;
@NotEmpty(message="please enter staff Username")
@Size(min = 6, max = 15, message = "Lenght must be between 6 to 15 characters")
private String stfUsrName;
@NotEmpty(message="please enter staff password")
@Size(min = 6, max = 10, message = "Lenght must be between 6 to 10 characters")
private String stfUsrPwd;
private boolean stfVisF;
private Date crtTs;
private Date updTs;
private String crtId;
private String updId;
@NotNull(message="please enter Staff Device ID")
private Integer deviceId;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@JsonBackReference
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "stf_role", nullable = false)
public StafRole getStafRole() {
return this.stafRole;
}
public void setStafRole(StafRole stafRole) {
this.stafRole = stafRole;
}
@Column(name = "stf_id", nullable = false)
public String getStfId() {
return this.stfId;
}
public void setStfId(String stfId) {
this.stfId = stfId;
}
@Column(name = "stf_name", nullable = false, length = 65535)
public String getStfName() {
return this.stfName;
}
public void setStfName(String stfName) {
this.stfName = stfName;
}
@Column(name = "stf_usr_name", length = 100)
public String getStfUsrName() {
return this.stfUsrName;
}
public void setStfUsrName(String stfUsrName) {
this.stfUsrName = stfUsrName;
}
@Column(name = "stf_usr_pwd", length = 100)
public String getStfUsrPwd() {
return this.stfUsrPwd;
}
public void setStfUsrPwd(String stfUsrPwd) {
this.stfUsrPwd = stfUsrPwd;
}
@Column(name = "stf_vis_f", nullable = false)
public boolean isStfVisF() {
return this.stfVisF;
}
public void setStfVisF(boolean stfVisF) {
this.stfVisF = stfVisF;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "crt_ts", nullable = false, length = 0)
public Date getCrtTs() {
return this.crtTs;
}
public void setCrtTs(Date crtTs) {
this.crtTs = crtTs;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "upd_ts", nullable = false, length = 0)
public Date getUpdTs() {
return this.updTs;
}
public void setUpdTs(Date updTs) {
this.updTs = updTs;
}
@Column(name = "crt_id", nullable = false, length = 100)
public String getCrtId() {
return this.crtId;
}
public void setCrtId(String crtId) {
this.crtId = crtId;
}
@Column(name = "upd_id", length = 100)
public String getUpdId() {
return this.updId;
}
public void setUpdId(String updId) {
this.updId = updId;
}
@Column(name = "device_id", nullable = false)
public Integer getDeviceId() {
return this.deviceId;
}
public void setDeviceId(Integer deviceId) {
this.deviceId = deviceId;
}
}
StafTyp类
@Entity
@Table(name = "staf_role", catalog = "nibblrdw_collections")
public class StafRole implements java.io.Serializable {
private Integer id;
private String roleDesc;
private String crtId;
private Date crtTs;
private String updId;
private Date updTs;
private Set<Staff> staffs = new HashSet<Staff>(0);
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "role_desc", nullable = false, length = 45)
public String getRoleDesc() {
return this.roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
@Column(name = "crt_id", length = 45)
public String getCrtId() {
return this.crtId;
}
public void setCrtId(String crtId) {
this.crtId = crtId;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "crt_ts", nullable = false, length = 0)
public Date getCrtTs() {
return this.crtTs;
}
public void setCrtTs(Date crtTs) {
this.crtTs = crtTs;
}
@Column(name = "upd_id", length = 45)
public String getUpdId() {
return this.updId;
}
public void setUpdId(String updId) {
this.updId = updId;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "upd_ts", nullable = false, length = 0)
public Date getUpdTs() {
return this.updTs;
}
public void setUpdTs(Date updTs) {
this.updTs = updTs;
}
@JsonManagedReference
@OneToMany(fetch = FetchType.EAGER, mappedBy = "stafRole")
public Set<Staff> getStaffs() {
return this.staffs;
}
public void setStaffs(Set<Staff> staffs) {
this.staffs = staffs;
}
}
控制器
@RequestMapping(value="loginmob", method = RequestMethod.GET)
public @ResponseBody Object test() {
LoginModel login=new LoginModel();
login.setName("report");
login.setPassword("report123");
JSONObject obj = new JSONObject();
if(!login.getName().isEmpty() & !login.getPassword().isEmpty()){
Staff staff=((StaffHomeService) staffService).login(login.getName(), login.getPassword());
System.out.println(staff.getStfUsrName()+" "+staff.getStfUsrPwd());
//logs exception
if(staff.getStfUsrName()!=null){
StafRole sr=staff.getStafRole();
System.out.println(sr.getRoleDesc());
obj.put("id", staff.getId());
obj.put("stf_name", staff.getStfName());
return staff;
}
}
return obj;
}
JSON URL中的对象
JSON OBJECT IN URL
{"id":2,"stfId":"2","stfName":"Admin","stfUsrName":"report","stfUsrPwd":"report123","stfVisF":true,"crtTs":1421048214000,"updTs":1422471300000,"crtId":"admin","updId":"null","deviceId":1}
在这里,我的问题是StafTyp没有序列化为json对象.要把StafTyp对象添加到Json,需要做哪些更改?
Here my problem is StafTyp is not serializing in to json object. What changes need to do to get StafTyp object to Json?
推荐答案
您已在 Staff
和 StaffRole
上切换了JSON注释.
You switched JSON annotations on Staff
and StaffRole
.
Staff#getStafRole()
应该用 @JsonManagedReference
注释,而 StafRole#getStaffs()
应该用 @注释JsonBackReference
.这样, staff->stafRole
将被序列化为JSON,而 staff->staffRole->人员
不需要,这就是您所需要的.
Staff#getStafRole()
should be annotated with @JsonManagedReference
, and StafRole#getStaffs()
should be annotated with @JsonBackReference
. This way staff -> stafRole
will be serialized to JSON, and staff -> staffRole -> staffs
won't, which is what you need.
这篇关于无法从Spring Hibernate中获取json中的manytoone映射对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!