Hibernate+maven+eclipse 实现自动建表(二)
import com.amos.model.Person;
/**
* @ClassName: PersonDao
* @Description: 用户dao
* @author: amosli
* @email:amosli@infomorrow.com
* @date 2014年2月28日 下午6:01:19
*/
public class PersonDao {
private static SessionFactory sessionFactory = null;
public static void main(String[] args) {
// SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
createSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person = new Person();
person.setAge(18);
person.setName("amos");
session.save(person);
session.getTransaction().commit();
session.close();
System.exit(0);
}
public static SessionFactory createSessionFactory() {
Configuration cfg = new Configuration().configure();
System.out.println("cfg.getProperties():" + cfg.getProperties());
StandardServiceRegistry build = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
sessionFactory = cfg.buildSessionFactory(build);
return sessionFactory;
}
}
复制代码
注: 加粗的部分是重点,这里建议用未过时的就是新建一个ServiceRegistry。
用 new Configuration().configure().buildSessionFactory()会提示:Deprecated. Use buildSessionFactory(ServiceRegistry) instead
看
源码,就会发现Configuration类中的buildSessionFactory()用的就是
final ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings( properties )
.build();
这里模仿其用法,也用StandardServiceRegistryBuilder实现ServiceRegistry,经测试是没问题的。
另,如果hibernate.cfg.xml自己更改为hibernate_test.xml那么应改怎么办?
只需要在new Configuration().configure("hibernate_test.xml")即可,这样可以指定其去加载classpath下的.xml文件。
4.效果
5.遇到的问题
复制代码
Exception in thread "main" org.hibernate.AnnotationException: No identifier specified for entity: com.amos.model.Person
at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:277)
at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:224)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:775)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3790)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3744)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
at com.amos.dao.PersonDao.main(PersonDao.java:11)
复制代码
出现个主要是因为在建model 时没有定义id为其主键,所以报错了,在其前面加上@Id即可。
6.补充
下面是:hibernate.cfg.xml一些可参考的配置,主要将部分配置外包化,这样考虑主要是项目有可能在测试环境测一段时间然后才部署到生产环境上去。
复制代码
< xml version='1.0' encoding='UTF-8' >