我认为你最好的选择是只使用反射。Hibernate 在内部也使用反射来读取通过注释完成的所有映射。如果你想尝试hibernate内部类然后看看Hibernate的SessionFactory实现类(org.hibernate.impl.SessionFactoryImpl),它为每个实体保存了包含类元数据(org.hibernate.metadata.ClassMetadata)的映射。您必须已经在代码中引用了单例 SessionFactory。
您可以通过以下方式获取 ClassMeta 数据
public ClassMetadata getClassMetadata(Class persistentClass) throws HibernateException
ClassMetaData 中的一些方法可能会引起您的兴趣。例如,
public void setPropertyValue(Object object, String propertyName, Object value, EntityMode entityMode) throws HibernateException;
EntityMode 可以指定为 EntityMode.POJO
此外,如果您有用于初始化休眠的配置对象的引用,您可以查询您感兴趣的表
public Table getTable(String schema, String catalog, String name) {
String key = Table.qualify(catalog, schema, name);
return tables.get(key);
}
并且有一些方法可以获取物理或逻辑列名
public String getPhysicalColumnName(String logicalName, Table table) throws MappingException
和
public String getLogicalColumnName(String physicalName, Table table) throws MappingException