(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类访问“公共静态String EntityLabel”。实际上,我想做这样的事情:

((TableWithId)  entityType.getJavaType()).EntityLabel

(2)出于安​​全原因,我也喜欢通过不允许用户对不继承自TableWithId的其他实体进行查询来保护系统。我想做类似的事情:

entityType.getJavaType() instanceof TableWithId

感谢您的帮助:)

mingshiyy483 回答:(Java / Spring)使用entityType.getJavaType()访问类元素

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

如果要测试一个类是否与另一个超类或超接口相同,则应使用isAssignableFrom:

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

,

对pero_hero表示感谢,我想出来了,除了类路径...

这是我完整的解决方案...

DELETE FROM component c1 
USING component c2 
WHERE c1.id > c2.id AND c1.key = c2.key;
本文链接:https://www.f2er.com/2646762.html

大家都在问