【问题描述】想通过Spring获取到Hibernate的Configuration对象,然后再获取到Table对象以及table里面的 unique constraint columns
【问题解决】
import java.util.Iterator;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.UniqueKey;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import com.signaldemand.flank.hibernate.model.ImplLicAppFtr;
/**
* Test TODO type documentation
*/
public class Test
{
public static void main(String[] args) throws Exception
{
BeanFactory f = new ClassPathXmlApplicationContext(new String[] { "commonContext.xml", "applicationContext.xml" });
LocalSessionFactoryBean configBean = (AnnotationSessionFactoryBean) (f.getBean("&sessionFactory"));//这里其实是获取到SessionFactory的上一级对象
Configuration configuration = configBean.getConfiguration();
Iterator i = configuration.getClassMapping(ImplLicAppFtr.class.getName()).getTable().getUniqueKeyIterator();
while (i.hasNext())
{
UniqueKey s = i.next();
Iterator columns = s.getColumnIterator();
System.out.println(s.getName());
while(columns.hasNext())
{
Column column = columns.next();
System.out.println(column.getName());
}
}
}
}
如果各位读者想通过column找到相应的property的话,那请看下面的代码
import java.util.Iterator;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
import org.hibernate.mapping.UniqueKey;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
import com.signaldemand.flank.hibernate.model.Cat;
/**
* Test TODO type documentation
*/
public class Test
{
public static void main(String[] args) throws Exception
{
BeanFactory f = new ClassPathXmlApplicationContext(new String[] { "commonContext.xml", "applicationContext.xml" });
LocalSessionFactoryBean configBean = (AnnotationSessionFactoryBean) (f.getBean("&sessionFactory"));
Configuration configuration = configBean.getConfiguration();
PersistentClass mapping = configuration.getClassMapping(Cat.class.getName());
Iterator i = mapping.getTable().getUniqueKeyIterator();
while (i.hasNext())
{
UniqueKey s = i.next();
Iterator columns = s.getColumnIterator();
System.out.println(s.getName());
while(columns.hasNext())
{
Column column = columns.next();
// System.out.println(column.getName());
Iterator p = mapping.getPropertyClosureIterator();
while (p.hasNext())
{
Property property = p.next();
Iterator columns2 = property.getColumnIterator();
while(columns2.hasNext())
{
Column column2 = columns2.next();
if(column2.getName().equals(column.getName()))
{
System.out.println(property.getName());
break;
}
}
}
}
System.out.println("----------------------------------------------");
}
}
}