首页 > 解决方案 > (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

任何帮助表示赞赏:)

标签: javaspring-bootinstanceofentities

解决方案


getJavaType 为您提供一个类实例。您可以通过反射访问静态字段: entityType.getJavaType().getField("EntityLabel").get(null)

如果你想测试一个类是否与其超类或超接口的另一个相同,你应该使用 isAssignableFrom:

Class.forName("xxxx.TableWithId").isAssignableFrom(entityType.getJavaType())


推荐阅读