当前位置: 首页 > 知识库问答 >
问题:

Hibernate命名策略更改表名

狄晟睿
2023-03-14

我对hibernates(5.1版)的命名策略有点困惑——也就是说,它改变了我的表名,我希望避免这种情况。还有-spring。jpa。冬眠根据intelij,命名策略似乎不受欢迎,但我找不到(其他)正确配置它的方法。

我在application.properties有以下配置:

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.current_session_context_class=thread

如上所述,第一个被标记为取消。

现在我有了一个实体:

@Entity
@Table(name = "usaUploadTable", schema = "usertable201", catalog = "")
public class UsaUploadTable {
    ....
}

表名是,就像在@table(name=“”)usahuploadtable中一样。

现在当我运行我的应用程序时

表'usertable201。“美国上传表格”不存在

这是正确的——它的命名与hibernate改变它的方式不同。

如何才能使hibernate正确使用我的表名?

编辑:

我也试过了

DefaultNamingStrategy
ImprovedNamingStrategy

他们都改变了

版本:

spring-boot-1.4.0.RELEASE
hibernate 5.1
javax-transaction-api 1.2
hibernate-validator 5.2.4
javassist 3.20

共有3个答案

鞠凌龙
2023-03-14

对于希望在Postgresql和Spring boot 1.5.2中使用大写字母的用户

public class CustomDatabaseIdentifierNamingStrategy extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {

    public static final long serialVersionUID = 1L;
    public static final CustomDatabaseIdentifierNamingStrategy INSTANCE = new CustomDatabaseIdentifierNamingStrategy();

    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        return new Identifier(name.getText().toUpperCase(), true);
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
        return new Identifier(name.getText().toUpperCase(), true);
    }

}
齐雅畅
2023-03-14
匿名用户

问题出在spring-boot-1.4中——他们似乎改变了属性(或其他什么),我现在发现这个答案“改进的命名策略”在Hibernate 5中不再有效,但仍然没有正确解决。因此,我对代码做了一些修改,不使用下划线方法,并扩展了新引入的类SpringPhysicalNamingStrategy

package com.foo;

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

import java.io.Serializable;
import java.util.Locale;


public class RealNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {

    public static final PhysicalNamingStrategyImpl INSTANCE = new PhysicalNamingStrategyImpl();

    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        return new Identifier(name.getText(), name.isQuoted());
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
        return new Identifier(name.getText(), name.isQuoted());
    }

}

在>和应用程序中。属性我已将不推荐使用的行更改为

spring.jpa.properties.hibernate.physical_naming_strategy=<package>.RealNamingStrategyImpl

现在它使用的表名和列名与实体文件中的表名和列名完全相同。

东方华晖
2023-03-14
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这对我很管用。以下是我正在使用的版本:

Spring Boot (v1.4.2.RELEASE)
Hibernate Core {5.0.11.Final}
 类似资料:
  • 我对hibernates(5.1版)的命名策略有点困惑——也就是说,它改变了我的表名,我希望避免这种情况。还有-

  • 我的spring boot项目在实体类中使用hibernate注释。我有自己的通用存储库,我从JPA的EntityManagerFactory获取Hibernate SessionFactory。当创建新表和列时,就会出现此问题。骆驼列是在数据库上用下划线创建的。在中,我将命名策略更改为,但没有什么固定的。

  • 我知道我可以用注释命名所有表,并为所有列提供名称,但这不是我想要的解决方案。 不幸的是,我没有找到任何匹配我的案例的策略(我知道这展示了如何创建自定义命名策略,但我不认为我的案例是不常见的),我应该为我的MariaDB配置使用什么命名策略来匹配我的案例?

  • 问题内容: 我正在使用postgresql数据库和spring + hibernate框架编写应用程序。 我将spring框架从4.1.5.RELEASE升级到4.2.0.RELEASE版本,并将hibernate框架从4.3.7.Final升级到了5.0.0.Final版本。 升级后,我在NamingStrategy中遇到问题。在postgresql数据库中,表列名称以小写字母用下划线分隔,在应

  • 定义如下JPA实体时: 自动创建的SQL表名为“CASEEXAMPLE”,列名为“FOOBAR”。如何使用下划线(例如“case\u example”和“foo\u bar”)将其从大写改为小写,而不必为每个@表和@列添加名称=“foo\u bar”? 命名策略是由JPA或实现定义的吗?我将JPA 2.0与Eclipse Link 2.5.0一起使用。