我创建了一个通用的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/