【问题标题】:Springboot data schema setupSpring Boot 数据架构设置
【发布时间】:2017-10-28 18:20:05
【问题描述】:

我在 Thymeleaf 和 Springboot 有一个项目。

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

事件

项目

任务

关系

项目的事件是多对一

项目到事件是 OneToMany

Project to Task 是 OneToMany

项目的任务是多对一

实体

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. 可以在事件 UI 上创建事件并正确保存。
  2. 项目 UI 屏幕(包含来自 Event 的一些信息)可以创建项目并在同一个 UI 上创建任务,但单击提交后,所有信息都会进入数据库,但任务表获取任务但 FK project_id 为空。

在获取和发布项目的控制器上,我将 Event 传递到模型中,因为我需要计划屏幕上 Event 的一些信息。

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

更新

我试过了:

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

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

【问题讨论】:

  • 关于问题的 UI 部分:如何设计 UI 是您的业务,它应该尽可能对用户有所帮助,而与您的后端架构无关。您正在为用户构建 UI,而不是为您的服务器构建 UI,所以请设身处地为他着想。但是您在页面上提交所有信息似乎很奇怪。通常,REST 与 Ajax 调用齐头并进

标签: hibernate spring-boot thymeleaf


【解决方案1】:

为什么 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

【讨论】:

  • 我在 ManyToOne 上为私有项目项目尝试了 @JoinColumn(name="project_id)。仍然没有在任务中保存 project_id。
  • 我假设项目必须先保存,所以当保存任务时,任务知道要关联什么项目。
  • 您不必费心以正确的顺序手动保存对象。如果您的映射正确并且您有正确的级联策略,则 JPA 框架可以自动完成此操作。无论如何,根据我的经验,与快速阅读一些文档然后从第一次尝试就正确解决问题相比,猜测它的工作原理和排除错误代码会浪费更多的时间。
  • 我仍然认为他尝试了您的答案,但没有解决 FK 问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2019-04-08
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
相关资源
最近更新 更多