【发布时间】:2015-10-16 05:09:20
【问题描述】:
在我们公司,我们讨论了如何在我们的java源代码中引用某些数据库条目。情况如下:
java web 应用程序连接到由 SQL 脚本设置的 MySQL 数据库,JPA/Hibernate 用于 ORM。在此脚本中,我们在“角色”表中插入 3 个角色(即用户可以在 Web 应用程序中拥有的角色,即用户表具有角色表的外键)。这些角色具有 SQL 脚本中给出的预定义主键/ID (BIGINT) 和名称 (VARCHAR)。这些角色不用于安全框架,而是用于业务逻辑。目前它看起来像这样:
if(user.getRole.getId()==1) {
// user is in role A
} else if(user.getRole().getId()==2) {
// user is in role B
} ...
由于角色必须在编译时由源代码知道(因为逻辑取决于它们),我们必须检查用户是否具有某些角色。现在的问题是如何做到这一点。我们已经讨论过:
a) 通过 ID 或名称更好地检查 b) 使用 String/Long 常量或枚举来检查相等性
to a) 我更喜欢检查 ID(因为它不太可能在我们使用脚本在数据库设置中插入 ID 时更改),角色名称更有可能在应用程序的生命周期内更改。
to b) 我更喜欢使用常量,因为我不喜欢依赖枚举索引/序数。此外,我们在这里不需要类型安全。我看到枚举的唯一优点是它很容易获取所有值,afaik 只有在常量的情况下反射才有可能。但由于我们在 DB 上定义了所有角色,因此可以在运行时从那里获取它们。
有什么建议吗?
【问题讨论】: