我有此代码。我必须使用自动增量来创建唯一的字段编号。这段代码没有给我任何帮助。当我尝试进行调试时,它会将“空”值赋给“数字字段”。我试图在数据库查询工具中执行此命令,一切正常。怎么了?
我的目标实体
@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和构造方法
回答您的问题,您应该通过以下方式更正您的声明:
@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;
// ...
}
另请参阅休眠文档的this section。