hibernate ImprovedNamingStrategy覆盖实体中的表名

use*_*201 6 hibernate

我正在使用org.hibernate.cfg.ImprovedNamingStrategy,但对于一个表我已经明确指定了表名

@Table(name="EventLog",schema = "eventlogs")
Run Code Online (Sandbox Code Playgroud)

但是hibernate似乎在寻找event_log.不应该显式命名覆盖ImprovedNamingStrategy提供的命名

小智 10

如果您希望对所有表使用ImprovedNamingStrategy,除了明确指定名称的表,您可以使用下面的子类.该列名表名的方法是当明确指定一个名字叫的,这个子类离开指定的名称不受干扰.

我认为这不是默认行为,这很奇怪.

public class RespectfulImprovedNamingStrategy extends ImprovedNamingStrategy
{
    @Override
    public String columnName(String columnName)
    {
        return columnName;
    }

    @Override
    public String tableName(String tableName)
    {
        return tableName;
    }
}
Run Code Online (Sandbox Code Playgroud)


Ken*_*han 5

它是org.hibernate.cfg.ImprovedNamingStrategy的行为,它将混合大小写的名称转换为嵌入的下划线名称.http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/cfg/ImprovedNamingStrategy.html.因此,如果您明确使用名称"EventLog",它将转换为"event_log".

如果您只想使用在其中明确指定的名称@Table,则应使用org.hibernate.cfg.DefaultNamingStrategy.默认情况下,在实例化org.hibernate.cfg.Configuration对象时使用它