我有一个未知的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;
}

10-07 22:08