Springboot数据模式设置

时间:2017-05-28 09:09:46

标签: hibernate spring-boot thymeleaf

我在Thymeleaf& amp; Springboot。

我需要知道在三个实体之间设置架构的最佳方法。

事件

项目

任务

关系

项目活动是ManyToOne

Project to Event是OneToMany

Project to Task是OneToMany

Project to Project是ManyToOne

实体

public Event() {}
@Id
private Long id
@ManyToOne(cascade = CascadeType.ALL)
private Project project;

public Project() {}
@Id
private Long id;
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Task> tasks;
@OneToMany(mappedBy = "project")
private List<Event> event;

public Task() {}
@Id
private Long id;
@ManyToOne
private Project project;

目前的情况:

  1. 可以在事件用户界面上创建事件并正确保存。
  2. 项目UI屏幕(其中包含来自Event的一些信息)可以创建项目,并在同一UI上创建任务,但点击提交后,所有信息都进入数据库但任务表获取任务但FK project_id为空。 / LI>

    在get和post项目的控制器上,我将Event传递给模型,因为我需要计划屏幕上的Event中的一些信息。

    是否有更好的方法在计划UI上显示来自事件但CRUD计划的一些信息。 为什么FK project_id为空?

    更新

    我试过了:

    public Task() {}
    @Id
    private Long id;
    @ManyToOne(optional = false)
    @JoinColumn(name = "project_id")
    private Project project;
    

    仍然没有在任务表上获得project_id。

1 个答案:

答案 0 :(得分:0)

  

为什么FK project_id为空?

您缺少将多对一关系映射到FK所在列的注释。此外,如果要保留Task实例并让JPA框架自动保留项目,则应定义级联策略。

@JoinColumn(name="project_id")
@ManyToOne(cascade=ALL)
private Project project;

看看一些JPA文档,这是一本很好的免费书:

about many-to-one

about cascading on relationships

Javadoc