我创建了一个通用的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类访问“公共静态字符串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())

关于java - (Java/Spring)使用entityType.getJavaType()访问类元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60684572/

10-11 23:19