java - 为什么@Formula 返回空值
问题描述
我有这个代码。我必须使用自动增量创建一个唯一的字段编号。这段代码什么也没给我。当我试图坚持调试时,它给了我null
在number
字段中的价值。我尝试在数据库查询工具中执行此操作,一切正常。怎么了?
我的目标实体:
@Entity
@Table(schema = "public")
public class Policeman implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Formula(value = "(select max(student_id) from student)")//+1
private Long number;
@Column
private String fam;
@Column
private String name;
@Column
private String otch;
}
学生单位:
@Entity
@Table(name="student", schema = "public")
public class Student extends Human implements Serializable {
@Id
@Column(name="student_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@ManyToOne(fetch = FetchType.EAGER,cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH})
@JoinColumn(name="fk_groups")
private Group gruppa;
}
我省略了 setter、getter 和构造函数。
解决方案
它看起来像一个XY 问题。
从技术上讲,您可以通过以下方式更正您的声明:
@Entity
@Table(schema = "public")
public class Policeman implements Serializable {
// ...
// Please pay attention that you should not use @Column annotation here.
@Formula(value = "(select max(public.student.student_id) from public.student)")
private Long number;
// ...
}
它会返回你所期望的。
但是,您不应该将它用于您的问题中提到的目的:
我必须使用自动增量创建一个唯一的字段编号。
典型的@Formula
用法是将基于实体的其他列计算的数据嵌入到实体中,并使用数据库特定的功能。您应该记住, usingselect
语句@Formula
会导致性能显着下降。
推荐阅读
- git - 了解 git diff 的作用
- mysql - MySQL timediff 函数没有给出正确的输出
- spring-boot - Springdoc:打开 swagger-ui.html 时得到 404
- list - 颤振:不将数据从函数嵌入到列表
- vue.js - 如何使用赛普拉斯选择 (Vue) v-select 选项?
- javascript - 尝试编写 discord bot 以要求特定命令的特定角色
- postgresql - Docker 错误 - 5432:绑定:地址已在使用中
- swift - SwiftUI 的问题:带有按钮的垂直滚动视图
- flutter - VSCODE 和 Visual Studio Android 模拟器
- swift - 如何使用 SPM 构建 iOS 特定包?