gpt4 book ai didi

java - 为什么@Formula返回空值

转载 作者:行者123 更新时间:2023-12-01 06:00:53 25 4
gpt4 key购买 nike

我有这个代码。我必须创建一个具有自动增量的唯一字段编号。这段代码没有给我任何东西。当我尝试在调试中进行持久化时,它在 number 字段中给出了 null 值。我尝试在数据库查询工具中执行此操作,一切正常。怎么了?

我的目标实体:

@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 problem .

从技术上讲,您可以通过以下方式更正您的声明:

@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;

// ...
}

它会返回你期望的结果。

但是,您不应该将其用于问题目的中提到的目的:

I have to make a unique field number with auto increment.

典型的@Formula用法是将基于实体的其他列计算的数据嵌入到实体中,并使用数据库特定函数。您应该记住,在 @Formula 中使用 select 语句可能会导致性能显着下降。

关于java - 为什么@Formula返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59730227/

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