java - 获取 JPA 实体版本的通用方法

标签 java jpa metamodel

我有一个未知的 JPA 实体,需要知道它的版本。我找不到通用的方法来执行此操作。

我尝试了元模型,但不知道将什么传递给 getVersion() 方法:

Object entity = ...;
Metamodel metamodel = entityManager.getMetamodel();
IdentifiableType<?> metaClass = 
    (IdentifiableType<?>)metamodel.managedType(entity.getClass());
metaClass.getVersion(<what to put here?>);

metaClass.getId() 中使用了相同的模式,但是有一个补充方法 getIdType() -- getVersionType() 是失踪。

其次,有entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity)方法,但没有getVersion(entity)方法。

有没有办法从未知实体获取版本?

最佳答案

只是比 try/catch 的答案更简洁:

public static SingularAttribute<?, ?> getVersionAttribute(ManagedType<?> managedType) {
    if (!(managedType instanceof IdentifiableType<?>))
        return null;

    IdentifiableType<?> identifiableType = (IdentifiableType<?>)managedType;
    if (!identifiableType.hasVersionAttribute())
        return null;

    for (SingularAttribute<?, ?> attribute : identifiableType.getSingularAttributes()) {
        if (attribute.isVersion())
            return attribute;
    }
    return null;
}

关于java - 获取 JPA 实体版本的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13265094/

相关文章:

jpa - Spring Hateoas 链接和 JPA 持久化

xmi - 在XTend中加载EMF模型实例

java - 使用Java和元模型时发生异常java.lang.ClassCastException:javassist.bytecode.InterfaceMethodrefInfo无法

java - 为什么我的小程序无法在没有 JDK 的计算机上运行?

java - 如何使自定义按钮的 toString() 与 MouseEntered() 一起使用?

java - 自定义一个 EntityManager

Hibernate/JPA - 如何在不触发延迟加载的情况下获取@ManyToOne 字段的 id

java - 元建模 Neo4J 数据库

java - Netbeans:JButton 按钮无法设置可见

java - 我需要获取数组元素的数量?