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

JPA/Hibernate

廖弘量
2023-03-14

Micronaut/JPA/Hibernate小写了我的数据库表的名称,并在启动时抛出一个错误,说找不到该表。表在那里,但它是用大写字母命名的。我如何配置micronaut/jpa/hibernate来考虑我的表名的大小写

我在MySQL8数据库中有一个现有的表< code >小部件,我需要使用jpa/hibernate从micronaut服务访问它。不幸的是,在启动时的模式验证期间抛出了一个错误,它在查找表< code>widget,而不是< code>WIDGET。

我已经在不同的环境中(Spring、postgres)寻找并找到了类似问题的解决方案,但无法让它们在microaut中工作。我试过用反勾号

application.yml:

datasources:
  default:
    url: 'jdbc:myhtml" target="_blank">sql://localhost:3306/myschema'
    username: '${dbUser}'
    password: '${dbPass}'
jpa:
  default:
    properties:
      hibernate:
        hbm2ddl:
          auto: validate

小部件.java:

@Entity(name = "WIDGET")
//@Table(name = "`WIDGET`")  // this doesn't work either
public class Widget {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "year")
    private Integer year;

    @Column(name = "widget_title")
    private String title;

// appropriate constructors, getters, & setters omitted for brevity...
}

WidgetRepository.java

@Repository
public interface WidgetRepository extends CrudRepository<Widget, Integer>
{
    @Executable
    Optional<Widget> find(String title);
}

例外情况:

14:40:33.759 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type  [org.hibernate.SessionFactory]

Message: Schema-validation: missing table [widget]
Path Taken: SessionFactory.hibernateSessionFactory(SessionFactoryBuilder sessionFactoryBuilder)
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type  [org.hibernate.SessionFactory]

Message: Schema-validation: missing table [widget]
Path Taken: SessionFactory.hibernateSessionFactory(SessionFactoryBuilder sessionFactoryBuilder)
    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1898)
    at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:245)
    at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:3298)
    at io.micronaut.context.DefaultBeanContext.finalizeConfiguration(DefaultBeanContext.java:3650)
    at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:337)
    at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:190)
    at io.micronaut.runtime.Micronaut.start(Micronaut.java:72)
    at io.micronaut.runtime.Micronaut.run(Micronaut.java:320)
    at io.micronaut.runtime.Micronaut.run(Micronaut.java:306)
    at com.example.Application.main(Application.java:11)
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [org.hibernate.SessionFactory]

Message: Schema-validation: missing table [widget]
Path Taken: SessionFactory.hibernateSessionFactory(SessionFactoryBuilder sessionFactoryBuilder)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2344)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2282)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2228)
    at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:2988)
    at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
    at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:2890)
    at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2709)
    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1892)
    ... 9 common frames omitted
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [widget]
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:129)
    at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42)
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:97)
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:76)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:204)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:85)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:335)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471)
    at io.micronaut.configuration.hibernate.jpa.EntityManagerFactoryBean.hibernateSessionFactory(EntityManagerFactoryBean.java:222)
    at io.micronaut.configuration.hibernate.jpa.$EntityManagerFactoryBean$HibernateSessionFactory3$Definition.build(Unknown Source)
    at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:161)
    at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2331)
    ... 16 common frames omitted

共有1个答案

巫培
2023-03-14

一位搜索能力比我强的同事发现了这个。而我不需要@替换DefaultPhysicalNamingStrategy。用我自己的课,我能够通过改变我的应用程序来解决我的问题。yml如下所示,特别添加了physical_naming_strategy:'org.hhibernate.boot.model.naming。jpa.default.properties下的PhysicalNamingStrategyStandardImpl“。Hibernate节点:

jpa:
  default:
    properties:
      hibernate:
        physical_naming_strategy: 'org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl'
        hbm2ddl:
          auto: validate
        show_sql: true
 类似资料:
  • 1.JPA 1.1 自动扫描Entity 彻底删除persistence.xml中Entity的逐一配置,采用自动扫描。因为Weblogic/Jboss这些自带JPA支持的应用服务器有时候会多管闲事的扫描persistence.xml,因此彻底删除掉这个文件是个不错的选择。 <bean id="entityManagerFactory" class="org.springframework

  • 我想使用Hibernate作为带有glassfish服务器的JPA提供程序。我在maven中添加了hiberante-entitymanager依赖项,但每次运行项目时都会出现这个错误。我是不是错过了另一个依赖。 这是pom.xml内容: 请帮帮忙。

  • 1)我有2张桌子,用户和user_profile一对一关系, 用户表: id,用户名,名字,姓氏-ID有主键, 用户配置文件: id,name,user_id-ID具有主键,user _ ID具有用户表的外键 2) 以下是两个JPA实体对象 用户: 用户配置文件: 当我试图插入到两个表中时,我看到列被添加到带有值的USER表中,而我在USER_PROFILE表的列中看不到任何值。 我是这个MySQ

  • 我已经为我的spring boot应用程序创建了所有模型,并根据业务逻辑成功地指定了它们之间的关系。在我的属性文件中,我将hibernate auto-ddl选项设置为create以根据实体之间的关系生成所有表。我也在使用liquibase进行数据库迁移。 但是,application-prod.yml中合适的方言应该是什么呢?我正在生产中使用MYSQL。我在这里使用的当前方言是“org.hibe

  • 为什么它更高效,因为像'your_name'这样的c.name扫描只在第一个查询中发生一次。

  • 我有Spring4+Hibernate4.3+PSQL9.5应用程序,遇到了一些camelcase字段转换的问题。