我正在尝试更改hibernate.cfg.xml中的默认命名策略,但没有成功:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
...
<property name="cfg.namingStrategy">com.kestuboof.util.LowercaseNamingStrategy</property>
我的策略永远不会打电话。
答案 0 :(得分:0)
数据库对象和模式元素的命名约定由org.hibernate.cfg.NamingStrategy接口的已使用实现控制。 Hibernate 3.6有四个这个接口的实现:
<强> org.hibernate.cfg.DefaultComponentSafeNamingStrategy org.hibernate.cfg.DefaultNamingStrategy org.hibernate.cfg.EJB3NamingStrategy org.hibernate.cfg.ImprovedNamingStrategy 强>
我决定通过扩展它并覆盖其classToTableName()方法来创建自定义命名策略。我的实现的源代码如下:
import org.hibernate.cfg.ImprovedNamingStrategy;
public class CustomNamingStrategy extends ImprovedNamingStrategy {
private static final String PLURAL_SUFFIX = "s";
@Override
public String classToTableName(String className) {
String tableNameInSingularForm = super.classToTableName(className);
return transformToPluralForm(tableNameInSingularForm);
}
private String transformToPluralForm(String tableNameInSingularForm) {
StringBuilder pluralForm = new StringBuilder();
pluralForm.append(tableNameInSingularForm);
pluralForm.append(PLURAL_SUFFIX);
return pluralForm.toString();
}
}
下一步是配置Hibernate以使用我的自定义命名策略。如果你正在使用Hibernate,你可以
您可以通过调用Configuration类的setNamingStrategy()方法来设置对自定义命名策略的引用,如Hibernate参考文档的实现命名策略部分所述。
您可以在Hibernate XML配置文件中将hibernate.ejb.naming_strategy属性的值设置为CustomNamingStrategy,如Hibernate Reference Manual的XML Configuration Section中所述。
如果您使用的是JPA,则可以通过在persistence.xml中将hibernate.ejb.naming_strategy属性的值设置为CustomNamingStrategy来设置使用的命名策略