hibernate - 如何使用hibernate为实体类字段设置动态默认值?
问题描述
我需要通过从相关表中获取值来在创建时为实体动态分配值。考虑下面的场景,我有两个班级 - 学生和批次。
在创建时在 Student 表中插入新记录时,我需要通过从 Batch 表中获取“Active”字段为true的 Batch 来在 Student 表中设置字段“allocatedBatch”。(考虑到只有一个批次可以在给定时间处于活动状态)
这必须动态完成。请建议我一些最好的休眠方式来处理这个问题。
注意 - 由于必须在不使用相应的服务和存储库类的情况下完成此操作,因此请查看休眠用法
学生.java
public class Student {
@Id
@GeneratedValue(Strategy = GeneratedType.Identity)
private Integer id;
private String name;
private Date DOB;
@ManyToOne
@JoinColumn(name = "Student_Batch", nullable=false)
private Batch allocatedBatch;
.....Getter and setter methods....
}
批处理.java
public class Batch {
@Id
@GeneratedValue(Strategy = GeneratedType.Identity)
private Integer id;
private String name;
private Date startDate;
@ColumnDefault("false")
private boolean Active;
@OneToMany(mappedBy = "allocatedBatch", cascade = {CascadeType.PERSIST, CascadeType.REMOVE)
private Set<Student> students;
.....Getter and setter methods....
}
解决方案
我不知道你的情况,但这听起来你可能需要重新考虑你的设计。但是,我认为使用事件侦听器或拦截器可能会成功。(如果我理解正确的话)
签出@PrePersist
注释。JPA 回调
推荐阅读
- data-structures - 为什么我们让元素从堆栈 2 推回堆栈 1
- c++ - Visual Studio 2017 中是否有自动保存功能来处理其错误和崩溃?
- javascript - More efficient way to handle an extremely specific response from a Rest API in JavaScript
- gradle - 从 build.gradle 读取 excel 文件
- python - Firestore 中具有服务帐号的精细权限
- php - 如何将(标题位置)重定向到 html 文件?
- sql-server - 在 SQL Server 中尝试使用菜单和鼠标右键创建表时如何解决错误?
- ios - Picker视图覆盖swift 4.2中模糊效果的值
- xslt - Saxon XSLT 转换后 Apache FOP 转换缓慢
- javascript - 我可以根据切换状态在切换类中使用条件吗