2012-01-27 65 views
2

我有项目类POJO与任务类POJO休眠一多关系数据插入错误

@Entity 
@Table(name = "task", catalog = "primavera") 
public class Task implements java.io.Serializable { 

    private Integer taskId; 
    private Integer depth; 
    private Double duration; 
    private String durationUnit; 
    private Date endDate; 
    private Integer parentId; 
    private Integer percentDone; 
    private Integer priority; 
    private Date startDate; 
    private Integer taskIndex; 
    private String taskName; 

    public Task() { 
    } 

    public Task(Integer depth, Double duration, String durationUnit, 
      Date endDate, Integer parentId, Integer percentDone, 
      Integer priority, Date startDate, Integer taskIndex, 
      String taskName) { 
     this.depth = depth; 
     this.duration = duration; 
     this.durationUnit = durationUnit; 
     this.endDate = endDate; 
     this.parentId = parentId; 
     this.percentDone = percentDone; 
     this.priority = priority; 
     this.startDate = startDate; 
     this.taskIndex = taskIndex; 
     this.taskName = taskName; 
    } 

    public Task(String string, Object object) { 
     // TODO Auto-generated constructor stub 
    } 

    @Id 
    @GeneratedValue 
    @Column(name = "task_id") 
    public Integer getTaskId() { 
     return this.taskId; 
    } 

    public void setTaskId(Integer taskId) { 
     this.taskId = taskId; 
    } 

    @Column(name = "depth") 
    public Integer getDepth() { 
     return this.depth; 
    } 

    public void setDepth(Integer depth) { 
     this.depth = depth; 
    } 

    @Column(name = "duration", precision = 22, scale = 0) 
    public Double getDuration() { 
     return this.duration; 
    } 

    public void setDuration(Double duration) { 
     this.duration = duration; 
    } 

    @Column(name = "durationUnit") 
    public String getDurationUnit() { 
     return this.durationUnit; 
    } 

    public void setDurationUnit(String durationUnit) { 
     this.durationUnit = durationUnit; 
    } 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "endDate", length = 19) 
    public Date getEndDate() { 
     return this.endDate; 
    } 

    public void setEndDate(Date endDate) { 
     this.endDate = endDate; 
    } 

    @Column(name = "parentId") 
    public Integer getParentId() { 
     return this.parentId; 
    } 

    public void setParentId(Integer parentId) { 
     this.parentId = parentId; 
    } 

    @Column(name = "percentDone") 
    public Integer getPercentDone() { 
     return this.percentDone; 
    } 

    public void setPercentDone(Integer percentDone) { 
     this.percentDone = percentDone; 
    } 

    @Column(name = "priority") 
    public Integer getPriority() { 
     return this.priority; 
    } 

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

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "startDate", length = 19) 
    public Date getStartDate() { 
     return this.startDate; 
    } 

    public void setStartDate(Date startDate) { 
     this.startDate = startDate; 
    } 

    @Column(name = "taskIndex") 
    public Integer getTaskIndex() { 
     return this.taskIndex; 
    } 

    public void setTaskIndex(Integer taskIndex) { 
     this.taskIndex = taskIndex; 
    } 

    @Column(name = "taskName") 
    public String getTaskName() { 
     return this.taskName; 
    } 

    public void setTaskName(String taskName) { 
     this.taskName = taskName; 
    } 

} 

我想通过下面的数据分配给我的POJO有关系

@Entity 
@Table(name = "project", catalog = "primavera") 
public class Project implements java.io.Serializable { 

    private Integer projectId; 
    private Date endDate; 
    private String projectDesc; 
    private String projectName; 
    private String projectTitle; 
    private Date startDate; 
    private Set<Task> tasks = new HashSet<Task>(0); 

    public Project() { 
    } 

    public Project(Date endDate, String projectDesc, String projectName, 
      String projectTitle, Date startDate, Set<Task> tasks) { 
     this.endDate = endDate; 
     this.projectDesc = projectDesc; 
     this.projectName = projectName; 
     this.projectTitle = projectTitle; 
     this.startDate = startDate; 
     this.tasks = tasks; 
    } 

    @Id 
    @GeneratedValue 
    @Column(name = "project_id") 
    public Integer getProjectId() { 
     return this.projectId; 
    } 

    public void setProjectId(Integer projectId) { 
     this.projectId = projectId; 
    } 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "endDate", length = 19) 
    public Date getEndDate() { 
     return this.endDate; 
    } 

    public void setEndDate(Date endDate) { 
     this.endDate = endDate; 
    } 

    @Column(name = "projectDesc") 
    public String getProjectDesc() { 
     return this.projectDesc; 
    } 

    public void setProjectDesc(String projectDesc) { 
     this.projectDesc = projectDesc; 
    } 

    @Column(name = "projectName") 
    public String getProjectName() { 
     return this.projectName; 
    } 

    public void setProjectName(String projectName) { 
     this.projectName = projectName; 
    } 

    @Column(name = "projectTitle") 
    public String getProjectTitle() { 
     return this.projectTitle; 
    } 

    public void setProjectTitle(String projectTitle) { 
     this.projectTitle = projectTitle; 
    } 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "startDate", length = 19) 
    public Date getStartDate() { 
     return this.startDate; 
    } 

    public void setStartDate(Date startDate) { 
     this.startDate = startDate; 
    } 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "project_task", joinColumns = { @JoinColumn(name = "project_id") }, inverseJoinColumns = { @JoinColumn(name = "task_id") }) 
    public Set<Task> getTasks() { 
     return this.tasks; 
    } 

    public void setTasks(Set<Task> tasks) { 
     this.tasks = tasks; 
    } 

} 

使用JSON

Set<Task> taskdata = new HashSet<Task>(); 
     taskdata.add(new Task(null,null,null,endD1,null,null,null,startD1,null,null)); 

jsonObject.put("projectTitle", jsonObject.getString("title")); 
     jsonObject.put("projectName", jsonObject.getString("name")); 
     jsonObject.put("projectDesc", jsonObject.getString("description").replace("\u200b", "")); 
     jsonObject.put("startDate", startD); 
     jsonObject.put("endDate", endD); 
     jsonObject.put("tasks", taskdata); 

Project project = (Project) JSONObject.toBean(jsonObject, Project.class); 

代码,但它并没有看起来是,即使我传递个工作e将作为taskdata也是我收到错误,如

35802 [HTTP-8085-4] ERROR org.hibernate.property.BasicPropertyAccessor - 抛出:IllegalArgumentException类:com.kintu.projectmgt.model.Task,getter方法属性:taskId

请帮我找到阻止我的数据完全插入数据库的问题。

+0

检查这个答案,可能是一个休眠的bug:http://stackoverflow.com/questions/3631349/how-do-i-cure-the-cause-of-hibernate-exception-illegalargumentexception-occurre。尝试设置'hibernate.cache.use_structured_entries = true' – fasseg 2012-01-27 08:05:02

+0

不是一个解决方案仍然是一样的错误。但还有一件事是这是我正在使用JSON将数据分配给与Task类有关的Project类的正确方法?还是我必须使用其他技术来插入完全具有一对多关系的数据。 – 2012-01-27 08:27:16

+0

它应该没问题,但你可以很容易地调试,并检查是否所有必要的字段已经在'JSONObject.toBean()' – fasseg 2012-01-27 08:31:47

回答

0

尝试在默认模式下加入的策略一样

@GeneratedValue(strategy=GenerationType.AUTO) 

@GeneratedValue(strategy=GenerationType.TABLE) 

通常@GeneratedValue用来写入长。
而且OneToMany可能会在另一个模型类别中预期ManyToOne

+0

nope not a solution仍然有错误。其实我认为我将JsonObject的值赋给Project的方式并不正确。你有什么解决方案吗? – 2012-01-27 08:56:36