Hibernate自動建表實現命名約定

假設全部的表名都有TBL_tableName這種形式的約定,替代手工的簡單方法是繼承「ImprovedNamingStrategy」類,具體代碼以下:java

public class HibernateNamingStrategy extends ImprovedNamingStrategy {

	@Override
	public String classToTableName(String className) {
		return "TBL_"+className;
	}

	@Override
	public String tableName(String tableName) {
		return "TBL_"+tableName;
	}
	
}


當顯示指定table名的時候,如:spring

@Table(name="user")
public class User implements Serializable {

那麼建表時,會調用tableName()這個方法,最終建表的表名將會是「TBL_USER」。session


當沒有顯示指定table名的時候,將會調用classToTableName()。ide

相似的還有表的列名命名約定,也能夠採用這種方法,只需再覆蓋「ImprovedNamingStrategy」類的columnName()方法和propertyToColumnName()方法。ui

爲了讓這個類生效,還須要進行一些設置:spa

SessionFactory sessionFactory = 
    new Configuration()
    .setNamingStrategy(new HibernateNamingStrategy())
    .buildSessionFactory();

若是與spring整合,能夠在sessionFactory中這樣設置:
code

<property name="namingStrategy">
    <bean class="test.HibernateNamingStrategy" />
</property>
相關文章
相關標籤/搜索