繁体   English   中英

如何在Spring中定义表格来持久化复杂对象?

[英]How to define forms to persist complex objects in Spring?

我需要定义一个from来创建我的一个对象的实例。 这是一项容易的任务,我已经有一些任务,但是此特定对象引用了必须在表单中定义的其他对象。 如何才能做到这一点? 我知道我可以要求用户输入de id并将其存储在DTO中,然后再获取真实对象,但是我想这不是实现此目的的最佳方法。 我能做什么?

我把我的实体放在这里:

@Entity
public class Route {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private Long distance;

    @Column(nullable = false)
    private String name;

    private String description;

    @ManyToOne
    @JoinColumn
    private Place origin;

}

这是引用对象:

@Entity
public class Place {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String name;

    private Long latitude;

    private Long longitude;

    private String imagePath;

    @OneToMany(mappedBy = "origin", cascade = CascadeType.REMOVE)
    private Set<Route> originRoutes;

}

实际上,具体取决于用例是什么。 让我们考虑几种可能性:

一口气立即创建一个Place和一些Routes-在这种情况下,我将实现视图,以便它创建一个复杂的结构,像您为JPA定义实体一样一对一地反映实体,并传递单个POST请求。 我们基本上假设总是与地点一起创建的路线数量有限。 路线无法在不同的地方之间共享,因为这毫无意义。

@RequestMapping(method = POST, value = "/places")
public CreatePlaceResponse createPlace(@RequestBody Place place) {
  ...
}

创建一个地方并在后续请求中提供路线 -如果我们想要更大的灵活性和/或期望分配给每个地点的路线数量很大,我们可以首先创建一个地点 ,然后使用另一个请求为其分配路线 (通过参考地点ID)。 这样,你让用户创建一个脚印整体结构的台阶,再加上你给的可能性增加一条路由以后。

@RequestMapping(method = POST, value = "/places")
public CreatePlaceResponse createPlace(@RequestBody Place place) {
  ...
}

@RequestMapping(method = POST, value = "/places/{placeId}")
public AddRouteResponse addRoute(@RequestBody Route route) {
  ...
}

根据情况,您还可以考虑批量创建路线 ,因此将路线列表传递到已创建的位置。

在UI端,我可以看到使用隐藏字段存储位置ID来响应输入的文本,或者使用“花式”选择(例如下面的其中一种选择)进行操作,您可以在其中输入选择内容进行过滤并赢得一次不会在内存中加载1000条记录:

http://silviomoreto.github.io/bootstrap-select/

无论哪种方式,您都将将隐藏字段或所选选项绑定到:

route.place

例如

<form:hidden path="place" value="id_of_place_updated_by_javascript" />

要么

<form:select path="place">

然后,您将注册一个转换器,该转换器会将提交的值转换为所需的类型,即Place。 提交后,您的转换器将获取Place ID,并从数据库中检索相应的Place。 然后,框架会将转换器返回的Place绑定到支持表单的Route上。

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert

有关使用格式化程序进行转换的示例,请参见此处:

http://springinpractice.com/2012/01/07/making-formselect-work-nicely-using-spring-3-formatters

在最后一个示例中,您将直接进入数据库以获取相关实体,而不是创建新实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM