代码之家  ›  专栏  ›  技术社区  ›  gabriel119435

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

  •  0
  • gabriel119435  · 技术社区  · 6 年前

    我有一个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没有将camelCase转换为SNAKE\u CASE,而是将upper\u 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;
    

    我希望hibernate隐式地将idPessoa属性映射到ID\u PESSOA列,这是默认行为。我不知道为什么这不会发生。

    application-context.xml ,我有一段代码显示了一些bean配置(包括私有名称):

    enter image description here

    xirulei

    编辑

    here 我看到这篇文章:

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

    知道我在用 应用-上下文.xml 要配置spring/jpa/hibernate,“添加映射之前”应该在哪里?我应该使用SpringNamingStrategy(如 old spring )或者hibernate.ejb.u策略?除此之外,哪些值是有效的?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jens Schauder    6 年前

    Snake case是Spring引导的默认值,而您看到的是Hibernate的默认值。看到了吗 Hibernate field naming issue with Spring Boot (naming strategy) .

    因为您显式地配置了 EntityManagerFactory

    为了解决这个问题,你可以参考弹簧靴 ImprovedNamingStrategy 显式,或者通过Spring Boots配置JPA application.properties