Hibernate命名策略NamingStrategy的使用

在hibernate的使用中会遇到这么一个问题,POJO实体类名与表名如何映射?POJO的变量到表的列名如何映射?如果你采用的是为每个实体的映射写一个xml配置文件,当然可以直接在其中指定其映射关系,但是一般情况下,我们不会这么做,而且你可能也想要自己控制它们的映射关系。

 

对于这种情况,Hibernate为我们提供了NamingStrategy,NamingStrategy中提供了一些接口允许我们改变上述映射关系,具体的API文档参考:http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/cfg/NamingStrategy.html。这其中有这两个接口可以改变表名及列名的映射关系,也对我们自定义命名策略比较重要:

public String classToTableName(String className);//类到表名映射

public String propertyToColumnName(String propertyName); //变量到列名的映射

 

在Hibernate中默认使用的命名策略是DefaultNamingStrategy,这是在Configuration中设置的,详情见“Hibernate源码分析——初始化”,因此如果我们想更改Hibernate的命名策略,只需继承NamingStrategy,实现相关的接口,并在Configuration的setNamingStrategy()将其传递给Hibernate即可。

可以看看Hibernate默认的命名策略是怎么处理的:

  public String classToTableName(String className)
  {
    return StringHelper.unqualify(className);
  }

  public String propertyToColumnName(String propertyName)
  {
    return StringHelper.unqualify(propertyName);
  }

 

unqualify()函数的实现为:

  public static String unqualify(String qualifiedName) {
    int loc = qualifiedName.lastIndexOf(".");
    return ((loc < 0) ? qualifiedName : qualifiedName.substring(loc + 1));

 

很明显,它就是直接截取类名、变量名作为映射的表名及列名。这有些不够灵活,如大小写不一样就无法匹配等等

 

如果未说明,本Blog中文章皆为原创文章,请尊重他人劳动,转载请注明: 转载自jmatrix

本文链接地址: Hibernate命名策略NamingStrategy的使用

(注:一般引用了,我都会添加引用,如果有侵权的请联系我)



This entry was posted in J2EE and tagged . Bookmark the permalink. Follow any comments here with the RSS feed for this post. Trackbacks are closed, but you can post a comment.