问题是一对多hibernate映射在这种json格式下不起作用。我认为这是一个逻辑错误,没有显示语法错误。
我的控制器是:
@RequestMapping(value = "/save", method = RequestMethod.POST, produces =MediaType.APPLICATION_JSON_VALUE,headers="Accept=application/json,application/xml")
public @ResponseBody JsonRecord setCurrentDataList(@RequestBody Employee emp) {
try {
int id=employeeServices.save(emp);
} catch (Exception e) {
return new JsonRecord(false,e.getMessage());
}
return new JsonRecord(true,"Successful",emp);
}
员工实体类为:
import java.io.Serializable;
import java.util.List;
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.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.IndexColumn;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonProperty;
@Entity
@Table(name="Employee")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
public class Employee implements Serializable{
private static final long serialVersionUID = -723583058586873479L;
@Id
@GeneratedValue
@Column(name ="empId")
@JsonProperty("empId")
private Integer empId;
@JsonProperty("empName")
private String empName;
@JsonProperty("empAddress")
private String empAddress;
@JsonProperty("salary")
private double salary;
@JsonProperty("empAge")
private Integer empAge;
@OneToMany(mappedBy="employee",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private List<Education> education;
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmpAddress() {
return empAddress;
}
public void setEmpAddress(String empAddress) {
this.empAddress = empAddress;
}
public double getSalary() {
return salary;
}
public void setSalary(double d) {
this.salary = d;
}
public Integer getEmpAge() {
return empAge;
}
public void setEmpAge(Integer empAge) {
this.empAge = empAge;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "employee")
@JsonManagedReference
public List<Education> getEducation() {
return education;
}
public void setEducation(List<Education> education) {
this.education = education;
}
}
教育实体是:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonProperty;
@Entity
@Table(name="Education")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
public class Education{
@Id
@GeneratedValue
@Column(name ="eduID")
@JsonProperty("eduID")
private int eduID;
@JsonProperty("qualification")
private String qualification;
@JsonProperty("stream")
private String stream;
@ManyToOne
@JoinColumn(name="empid")
private Employee employee;
public int getEduID() {
return eduID;
}
public void setEduID(int eduID) {
this.eduID = eduID;
}
public String getQualification() {
return qualification;
}
public void setQualification(String qualification) {
this.qualification = qualification;
}
public String getStream() {
return stream;
}
public void setStream(String stream) {
this.stream = stream;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "empId", nullable = false)
@JsonBackReference
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
JSON输入:
{
"empName": "myname",
"empAddress": "my address",
"salary": 1000,
"empAge": 24,
"education":[{
"qualification":"mca",
"stream":"mca"
}]
}
一对多映射不适用于这种json格式。如何以json格式实现这种映射?请给我你有价值的建议。
使用
@OneToMany(cascade={CascadeType.ALL})
@Fetch(FetchMode.JOIN)
@JoinColumn(name="empId", referencedColumnName="empId")
private Set<Education> education;
而不是,
@OneToMany(mappedBy="employee",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private List<Education> education;
我很难为不同的JSON输入编写jolt规范。我需要一个通用的jolt规范,这样我就可以得到一个扁平的json。 输入 1 : 我们有一个材料运动数组 输入2:我们没有物质运动数组 我已经为输入1使用了joltspec,它工作正常,我需要它也为输入2工作
实体(getter和setter等略):复合键实体 用户实体
问题内容: 例如,我有实体: 和实体: 现在,我需要查询所有对象,以便每个对象仅具有介于和之间的那些对象。也就是说,如果有10个具有正确日期的对象,则列表将仅包含那10个对象,仅此而已。可能吗? 提前致谢。 问题答案: 我使用@Filter解决了问题: 并将其应用于会话: 顺便说一句,在使用Hibernate时,应该使用什么查询:它是自己的机制还是“原始” SQL(例如“内部联接”)?
我想使用联接表在两个表之间建立一对多关系。 这就是为什么我想使用联接表: Hibernate单向一对多关联-为什么连接表更好 最后,我想使用Hibernate注释来执行此操作。 我找到了一些使用xml映射实现这一点的示例,但没有使用注释。 我相信这将是如何创建表需要
问题内容: 我已经看到人们使用多对一映射来表示一对一关系。我也在加文·金(Gavin King)的书和文章中阅读了此内容。 例如,如果一个客户可以只有一个送货地址,而一个送货地址只能属于一个顾客,则映射为: 这本书的原因是(引用): “您不在乎关联目标方面的内容,因此您可以将其视为 一对一的 关联,而无需涉及 很多 部分。” 我的问题是,为什么不使用?什么使a成为不那么理想的选择? 谢谢。 问题答
问题内容: 我想在 独立应用程序* 中将 hibernate 与 嵌入式derby 一起使用,并且我有一些问题: * 我需要什么jar? 必要的hibernate配置是什么? 还有其他必要的配置吗? 查询/条件是否有任何问题/限制? 如果您还可以建议我一些适合这种方法的好教程,那将是可取的,谢谢。 问题答案: 我将Apache Derby与Hibernate一起用于测试项目的一个模型类(它们的 e