jakarta-ee - 如何获取持久对象的 SingularAttribute 映射值?

标签 jakarta-ee jpa persistence metamodel

我有一个持久对象(Action)和自动生成的数据模型(Action_)。通过拥有 Action 类的对象和 SingularAttribute 的实例,是否可以获取与给定 SingularAttribute 对应的字段?

我需要这样的功能:

public S getValue(T object,SingularAttribute<T,S> attribute);

我的实体类(Action.java):
@Entity
@Table(name="ACTION")
public class Action implements Serializable {
    private long id;
    private String name;

    public Action() {
    }


    @Id
    @Column(unique=true, nullable=false, precision=6)
    public long getId() {
        return this.id;
    }

    public void setId(long id) {
        this.id = id;
    }


    @Column(length=50)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我的元模型类(Action_.java):
@StaticMetamodel(Action.class)
public class Action_ {
    public static volatile SingularAttribute<Action, Long> id;
    public static volatile SingularAttribute<Action, String> name;
}

最佳答案

您可以使用 getJavaMember()获取成员的方法,然后测试该成员是否为 FieldMethod ,并使用反射访问字段或调用对象上的方法。

在访问/调用它之前,您可能必须使该字段或方法可访问。而且您还必须处理到对象的原始类型转换。

主要问题是:你为什么需要这个?

如果你只需要这个特定的实体类,你可以简单地在属性名称上使用一个开关并返回适当的值:

switch (attribute.getName()) {

    case "name":
        return action.getName();
    ...
}

关于jakarta-ee - 如何获取持久对象的 SingularAttribute 映射值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7077464/

相关文章:

java - 使用 java 库将音频 AMR 转换为 WAV

java - 返回本地或远程的决定

java - 如何将 Java Web 应用程序部署到远程 Wildfly 服务器?

hibernate - JpaRepository 不会插入多对多数据

java - EntityManager.merge 插入重复实体

java - 如何将不同方案的两个事务合并为一个?

java - 无需 protected 资源的 JSF/Java EE 登录

hibernate - 无法在Kotlin和JpaRepository中为嵌套列表对象找到适当的构造函数错误

java - 一个类从一个实例转换到它自己的类失败的可能原因?

java - 从数据库中检索特定数量的记录 - JPA(提高性能)