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

查找hibernate应用命名策略的位置

叶智
2023-03-14

我有一个spring boot项目,它使用以下设置运行:

@SpringBootApplication(exclude=SecurityAutoConfiguration.class)
@ImportResource("classpath:/application-context.xml")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

我发现hibernate在映射atributes时没有将camelCase转换为SNAKE_CASE,而是将upper_case应用于它(因为Oracle不区分大小写,所以这并不重要):

Caused by: java.sql.SQLException: ORA-00904: "PESSOA0_"."IDPESSOA": invalid identifier

这是我的实体:

@Entity
@Table(name = "BC_PESSOA")
@NamedQuery(name = "Pessoa.findAll", query = "SELECT p FROM Pessoa p")
public class Pessoa implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  private Long idPessoa;

编辑

我发现我的项目使用的是spring Boot1.4.5.发行版,但由于其他无可争议的原因,Hibernate的版本是4.2.19.final。看着这里,我看到了这一块:

在添加映射之前:

SessionFactory sf = new Configuration()         
.setNamingStrategyDelegator(ImprovedNamingStrategyDelegator.DEFAULT_INSTANCE)
      .addFile("Item.hbm.xml")
      .addFile("Bid.hbm.xml")
      .buildSessionFactory();

知道我正在使用application-context.xml来配置Spring/jpa/hibernate,那么“在添加映射之前”应该在哪里?我应该使用SpringNamingStrategy(像旧的spring一样)还是Hibernate.ejb.naming_Strategy?除此之外,哪些值是有效的?

共有1个答案

贡正诚
2023-03-14

Snake是Spring Boot的默认情况,而您所看到的是Hibernate的默认情况。请参见Spring Boot中的Hibernate字段命名问题(命名策略)。

由于您使用属性显式地配置了EntityManagerFactory,我想这会使Boot跳过它的默认配置。由于您的命名策略不存在,Hibernate回到了它的默认状态,这就是您所看到的。

为了解决这个问题,您可以引用Spring BootsProminedNamingStrategyExplicity,或者通过Spring Bootsapplication.properties配置JPA,而不提供命名策略。

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

  • 问题内容: 我对hibernate(5.1版)的命名策略有些困惑-即它更改了我的表名,我想避免这种情况。另外- 根据intelij似乎已弃用,但我找不到正确配置它的(另一种)方法。 我在application.properties中具有以下配置: 如前所述,第一个被标记为已练习。 现在我有一个实体: 表格名称是类似usaUploadTable 中的名称。 现在,当我运行我的应用程序时,我得到 表’

  • 我对hibernates(5.1版)的命名策略有点困惑——也就是说,它改变了我的表名,我希望避免这种情况。还有-

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

  • 我尝试设置我的JPA映射。由于某些原因,我必须有相同的java变量/表列名(包括大写字母),但我不能设置Hibernate。我尝试了明确的列名: 对于隐式映射: 这两种方法都创建不带大写字母的列名——“nextinvoicenr”。 我还试图改变Hibernate配置添加: 但没有成功