Spring 没有 Id 字段的构造函数
Spring Constructor without Id field
我想为更多实体创建一个构造函数,但没有 Id 字段。你建议我做什么? @AllArgsConstructor 注释不好,因为那时会包含 Id 字段,@NoArgsConstructor 不会为此目的完成它的工作,并且 @RequiredArgsConstructor 只有在您有 final 或 @NoNull 字段时才有效。我是否应该将其他列设置为 @NoNull 或 final?另外,哪种方法更好?我应该将我的 Id 设为 UUID String 类型还是带有 @GeneratedValue 注释的 Long?
要回答有关 Lombok 构造函数注释的第一个问题,您是对的,@RequiredArgsConstructor
、@AllArgsConstructor
和 @NoArgsConstructor
不适合省略 id 的构造函数。
但是,只要要实例化您的 id,您就可以手动创建自己的构造函数,省去 id 属性。
以下示例由 Student()
、Student(studentId, name)
或 Student(name)
(省略 id)构成
长整型ID
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name= "student")
public class Student {
@Id
@GeneratedValue
@Column(name = "student_id", nullable = false)
private Long studentId;
private String name;
public Student(String name){
this.name = name;
}
}
作为 UUID 的 ID
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name= "student")
public class Student {
@Id
@Column(name = "student_id", nullable = false)
private UUID studentId;
private String name;
public Student(String name){
this.studentId = UUID.randomUUID();
this.name = name;
}
}
由于studentId
在任何一种情况下都会生成,无论如何它都会在持久化到数据库时收到一个值,所以我们不需要分配一个。
关于您的问题另外,哪种方法更好?我应该将我的 Id 作为 UUID String 类型还是带有 @GeneratedValue 注释的 Long?,这完全取决于您,并且取决于应用程序及其预期用途,但如果您 checkout this discussion about UUID vs GUID 我认为它会有所帮助您决定 UUID 是否符合您的需求。
我想为更多实体创建一个构造函数,但没有 Id 字段。你建议我做什么? @AllArgsConstructor 注释不好,因为那时会包含 Id 字段,@NoArgsConstructor 不会为此目的完成它的工作,并且 @RequiredArgsConstructor 只有在您有 final 或 @NoNull 字段时才有效。我是否应该将其他列设置为 @NoNull 或 final?另外,哪种方法更好?我应该将我的 Id 设为 UUID String 类型还是带有 @GeneratedValue 注释的 Long?
要回答有关 Lombok 构造函数注释的第一个问题,您是对的,@RequiredArgsConstructor
、@AllArgsConstructor
和 @NoArgsConstructor
不适合省略 id 的构造函数。
但是,只要要实例化您的 id,您就可以手动创建自己的构造函数,省去 id 属性。
以下示例由 Student()
、Student(studentId, name)
或 Student(name)
(省略 id)构成
长整型ID
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name= "student")
public class Student {
@Id
@GeneratedValue
@Column(name = "student_id", nullable = false)
private Long studentId;
private String name;
public Student(String name){
this.name = name;
}
}
作为 UUID 的 ID
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name= "student")
public class Student {
@Id
@Column(name = "student_id", nullable = false)
private UUID studentId;
private String name;
public Student(String name){
this.studentId = UUID.randomUUID();
this.name = name;
}
}
由于studentId
在任何一种情况下都会生成,无论如何它都会在持久化到数据库时收到一个值,所以我们不需要分配一个。
关于您的问题另外,哪种方法更好?我应该将我的 Id 作为 UUID String 类型还是带有 @GeneratedValue 注释的 Long?,这完全取决于您,并且取决于应用程序及其预期用途,但如果您 checkout this discussion about UUID vs GUID 我认为它会有所帮助您决定 UUID 是否符合您的需求。