java - (Java/Spring) 使用 entityType.getJavaType() 访问类元素
问题描述
我创建了一个通用的 Spring Entiy-Class “TableWithId”,旨在被其他类继承。
这里是从基类中截取的:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "__base_table")
public class TableWithId {
public static String EntityLabel = "All data";
@Id
@GeneratedValue
protected Long id;
因此,在我的子类中,我正在实现更多字段等。这非常有效,它可以按预期创建、填充和列出内容......
现在我希望能够获得我所有实体的列表。这很好用,至少可以得到名称和类名。
entityManager.getMetamodel().getEntities()
基于实体名称,我还可以根据用户参数加载实体:
entityManager.createQuery("Select t from " + entityName + " t").getResultList();
现在有两件事我不能做:
(1)访问我的类的静态java属性,我实际上想在运行时使用“entityType.getJavaType()”返回的java类访问“public static String EntityLabel”。事实上,我想做这样的事情:
((TableWithId) entityType.getJavaType()).EntityLabel
(2) 出于安全原因,我还喜欢通过不允许用户对不从 TableWithId 继承的其他实体进行查询来保护系统。我想做类似的事情:
entityType.getJavaType() instanceof TableWithId
任何帮助表示赞赏:)
解决方案
getJavaType 为您提供一个类实例。您可以通过反射访问静态字段:
entityType.getJavaType().getField("EntityLabel").get(null)
如果你想测试一个类是否与其超类或超接口的另一个相同,你应该使用 isAssignableFrom:
Class.forName("xxxx.TableWithId").isAssignableFrom(entityType.getJavaType())
推荐阅读
- python - 取消初始化模块后的 pygame sys.exit() 错误
- machine-learning - 全局平均池化(GAP)之前的 VGG16 中的最大池化?
- javascript - 将 javascript .millis() 对象转换为其等效的 python
- excel - 使用通配符从文件夹中获取文件名
- python - Python。我想以交互方式将我的猜谜游戏的输入限制为整数
- google-maps - 选择地址时谷歌地图设置文本字段值
- java - DRL 文件的方法以启用强制班次计数和连续/实时计划
- c++ - 有没有办法清除getline中的输入?
- python - 在 Siesta 库的 python/fortran 上编译时出错(错误:行被截断)
- c - 如何使用 WinAPI 中的 EN_PROTECT 部分保护富编辑控件中的字符?