I think your best bet would be using reflection only. Hibernate internally too uses reflection to read all the mappings done via annotations. If you want to try out the hibernate internal classes then have a look at the SessionFactory implementation class of Hibernate (org.hibernate.impl.SessionFactoryImpl), it holds map containing class metadata (org.hibernate.metadata.ClassMetadata) for each entity. You already must be having a reference to the singleton SessionFactory in your code.
You can get hold of ClassMeta data with
public ClassMetadata getClassMetadata(Class persistentClass) throws HibernateException
There are few methods in ClassMetaData which could be of your interest.For e.g.,
public void setPropertyValue(Object object, String propertyName, Object value, EntityMode entityMode) throws HibernateException;
EntityMode can be specified as EntityMode.POJO
Also if you have a reference of Configuration object used for initializing hibernate you can query for the table you are interested in as
public Table getTable(String schema, String catalog, String name) {
String key = Table.qualify(catalog, schema, name);
return tables.get(key);
}
and there are methods to get the physical or logical column names
public String getPhysicalColumnName(String logicalName, Table table) throws MappingException
and
public String getLogicalColumnName(String physicalName, Table table) throws MappingException