为什么@Formula返回空值

时间:2020-01-14 08:47:11

标签: java database hibernate jpa entity

我有这个代码。我必须使用自动递增功能来创建唯一的字段编号。这段代码没有给我任何帮助。当我尝试进行调试时,它将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;
}

学生实体:

docker network create -d bridge --subnet 172.19.0.0/24 --opt com.docker.network.bridge.name=br-mynet mynet

我省略了setter,getter和构造函数。

1 个答案:

答案 0 :(得分:-1)

它看起来像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;

   // ...
}

,它将返回您期望的结果。

但是,您不应将其用于提问目的:

我必须创建一个具有自动增量的唯一字段编号。

典型的@Formula用法是根据实体的其他列以及数据库特定功能的使用将数据嵌入到实体中。而且您应该记住,在select中使用@Formula语句会导致性能显着下降。