gpt4 book ai didi

java - 使用数据库生成的字段创建 api 模型的最佳实践?

转载 作者:行者123 更新时间:2023-12-01 22:47:54 25 4
gpt4 key购买 nike

对 Spring 有点陌生,寻求最佳实践:

假设我的模型类之一如下所示:

Entity
@Table(name="task")
@Getter @Setter @NoArgsConstructor @RequiredArgsConstructor
public class Task {


@Id
@NotNull
private Long id; //this will be auto-generated in the database
@NotNull
private String name;
private boolean completed;
@Column(name="startdate", columnDefinition = "TIMESTAMPTZ")
private LocalDateTime StartDate;
@Column(columnDefinition = "TIMESTAMPTZ")
private LocalDateTime deadline;
}

我有一个标准的 DTO 和 Repository 类 Task 。但是当我创建服务类时,创建方法可能会像这样(为了说明而极其简化):

  public Task create(Task t){
try{
return taskRepository.save(t);
} catch(Exception e){
//handle exception
}
}

事情是这样的:在数据库中创建任务之前,参数 t 不会有 id。但 id 不应该为空。我看到多个选项。

  1. 创建 taskDetails具有除 id 之外的所有参数的对象和uuid ,以及我所有其他模型的类似对象。也许很脆弱,因为如果我更改任务,那是另一个需要更改的类。
  2. 参数 t 将是一个 id 为 0 的任务。但是 save() 会是这样吗?方法尝试保存它而不是让数据库创建值?
  3. 创建模型将接受 Task 的参数作为单独的参数,如 (String name, LocalDateTime startDate...) 中所示。 。但我可能不想包含所有参数,因此我需要多个创建类。
  4. id字段为空。

这在任何 API 中都是很常见的情况,所以我假设 Spring 有一个标准方法来做到这一点。但我一直在四处寻找并试图找到它,但我找不到。这里的最佳实践是什么?

如果这是一个骗局,请引导我找到已回答的问题。

更新:根据 Shekhar 的回答,我研究并发现我可能应该使用 @GeneratedValue(strategy = GenerationType.IDENTITY) ,因为这告诉 Spring 数据库正在负责生成该字段。想必这意味着我应该摆脱 @NotNull注解。但是如果还有数据库自动生成的其他字段怎么办?我可以使用 GenerationType.IDENTITY不止一次?

最佳答案

所以我所做的是使用@GenerateValue(strategy = GenerationType.IDENTITY)作为身份,并使用@GenerateValue(strategy = GenerationType.AUTO)作为其他值>。这意味着我的java程序正在生成身份,但这没关系,因为它们只是随机的uuid,所以我将它们设置为默认生成而不是总是生成,所以如果我的程序提供了uuid,数据库就不会提示。

关于java - 使用数据库生成的字段创建 api 模型的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58466409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com