我正在使用org.hibernate.cfg.ImprovedNamingStrategy,但对于一个表我明确指定了表名
@Table(name="EventLog",schema = "eventlogs")
但是hibernate似乎在寻找event_log。显式命名不应该覆盖ImprovedNamingStrategy
提供的命名答案 0 :(得分:10)
如果您想对所有表使用ImprovedNamingStrategy,除了那些明确指定名称的表,您可以使用下面的子类。 columnName 和 tableName 方法是在显式指定名称时调用的方法,此子类使指定的名称不受限制。
我认为这不是默认行为,这很奇怪。
public class RespectfulImprovedNamingStrategy extends ImprovedNamingStrategy
{
@Override
public String columnName(String columnName)
{
return columnName;
}
@Override
public String tableName(String tableName)
{
return tableName;
}
}
答案 1 :(得分: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对象
答案 2 :(得分:2)
你可以明确地建议hibernate使用旧的EJB3NamingStrategy,它通过定义以下属性来识别带注释的表名(取决于使用spring V4 +):
弹簧:
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
没有弹簧(只有休眠):
hibernate.ejb.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
答案 3 :(得分:2)
用于春天的hibernate 4
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
用于带有spring的hibernate5
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl