java - Hibernate:仅允许具有给定属性的实体加入 OneToMany 关联
问题描述
如果多方具有给定的属性值,是否可以签入@OneToMany
或关联?@ManyToMany
例如,学生参观讲座:
@Entity
class Lecture implements Serializable {
@Id
Integer id;
@OneToMany
Set<Student> student;
}
@Entity
class Student implements Serializable {
@Id
Integer id;
Boolean isFemale;
}
我可以用“魔术”注释强制只允许女学生参观讲座吗?
解决方案
您的 @OneToMany 注释将执行 SELECT 语句。您也许可以使用供应商专有注释过滤结果,例如 @Where ( https://forum.hibernate.org/viewtopic.php?f=1&t=1026210&view=next )。
但似乎您想限制 INSERT 案例。您可能只使用 Java bean 验证器。因此,如果您的 Student 类具有相反的 @ManyToOne 属性讲座,那么您可以创建一个拒绝新学生对象的验证器,这些对象与讲座链接并且是女性。(从而实现你想要的歧视)(见bean验证:https ://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#section-class-level-constraints )
但是您可能已经猜到自己的约束不是真正的数据库约束。使用 SQL 是不可能的,所以不要指望 JPA 可以。
推荐阅读
- java - 如何使用对象将数据添加到 JavaFX 中的空表视图中?
- javascript - 将数据从对象取回表单
- eclipse - 为什么 Eclipse 删除导航器视图?
- regex - 空格分隔的文件到csv?
- deep-learning - CNN-VAE,处理大小不同但像素分辨率相同的数据集的最佳实践
- python - 通过 python 脚本运行用户输入并在 django 站点上返回输出
- javascript - 我的力计算代码不会打印到控制台
- java - Kotlin java.io.NotSerializableException 发送到套接字时
- sql - 如何在 Oracle SQL 中对函数进行分组和应用
- gitlab - 是否可以同时在 gitlab 项目中添加多个成员?