我想限制用户将一组给定值以外的值输入到jpa列中。
例如,如果我有这样的表..
sno sname college_name
----------------------
101 smith Stanford
102 jack Harvard
103 tiger Stanford
104 scott Harvard
和班级..
@Entity
@Table(name="student")
public class Student
{
@Id
@GeneratedValue
private Integer sno;
@Column(name="SNAME", nullable=false)
private String sname;
@Column(name="COLLEGE_NAME", nullable=false)
private String collegeName;
// setters and getters omitted
}
是否有办法(可能使用注释)限制用户将 Stanford 或 Harvard (区分大小写)输入大学名称。
注意:我想通过Java程序来保存数据库调用,而不是在数据库端编写触发器。上述实体是容器管理的,sno
,sname
,college_name
是持久性字段,而不是属性。
在插入之前,我是否必须进行检查?我正在寻找另一种方式?
提前致谢。希望你能尽快回复。
答案 0 :(得分:2)
使用枚举 http://tomee.apache.org/examples-trunk/jpa-enumerated/README.html
顺便说一下,我不会直接在DB表中存储String值(“Harvard”,“Stanford”)。相反,我会使用代码(1,2)并引入一个字典表:
代码|价值 1哈佛 2斯坦福
答案 1 :(得分:2)
枚举是一种很好的方式,但你可能无法预见到世界上所有的大学,所以你也可以考虑使用与已知大学不同的表格,以及与它有多对一的关系。 / p>
通常应使用bean验证来确保数据有效。 数据库触发器或约束很有用,但在不同的数据库提供程序之间并不是唯一的。
来自德国, 托马斯
答案 2 :(得分:1)
您可以将collegeName的类型更改为Enum,而不是String。