我是Micronaut的新手,我正在尝试将其与现有数据库一起使用。
我有一个带有显式表和列命名的实体,比如
@Entity
@Table(name = "TGE040LABEL", schema = "dbo", catalog = "tp_63_dev")
@IdClass(Tge040LabelEntityPK.class)
public class Tge040LabelEntity
即使我在应用程序中配置了物理命名策略
。yml是这样的(以及各种变体,我尝试了各种物理命名策略的值):
jpa:
default:
entity-scan:
packages:
- 'my.app.domain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: true
physical_naming_strategy: "io.micronaut.data.model.naming.NamingStrategies.UpperCase"
dialect: "org.hibernate.dialect.SQLServerDialect"
我仍然得到这个错误
原因:com.microsoft.sqlserver.jdbc.SQLServerExctive:无效的对象名称tp_63_dev.dbo.tge040_label
。
好像我的配置完全被忽略了。
Micronaut代码版本<3.3
我错过什么了吗?
更新
之前:
jpa:
default:
entity-scan:
packages:
- 'my.app.domain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: true
dialect: "org.hibernate.dialect.SQLServerDialect"
之后:
jpa:
default:
entity-scan:
packages:
- 'my.app.domain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: false
dialect: "org.hibernate.dialect.SQLServerDialect"
physical_naming_strategy: 'org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl'
只是说,配置是在正确的位置,对show_sql
的更改是值得的,对physical_naming_strategy
的更改显然被忽略了。
实际上是否有可能更改物理命名策略
?
更新2
更改我的配置如下:
jpa:
default:
entity-scan:
packages:
- 'my.app.domain'
properties:
hibernate:
id:
new_generator_mappings: false
format_sql: true
globally_quoted_identifiers_skip_column_definitions: true
jdbc:
lob:
non_contextual_creation: true
dialect: org.hibernate.dialect.SQLServerDialect
ddl-auto: none
physical_naming_strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit_naming_strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
我明白了:
在我看来,这意味着micronaut正在主动覆盖我的配置,这至少是非直观的。这种行为记录在什么地方了吗?
我们在使用PostgreSQL时也遇到了同样的问题。我们通过使用
波乔:
@Table(name="\"TBLTABLE\"", schema="a_schema"
应用yml:
jpa:
database: POSTGRESQL
show-sql: true
open-in-view: false
generate-ddl: false
properties:
hibernate:
id:
new_generator_mappings: false
format_sql: true
globally_quoted_identifiers_skip_column_definitions: true
jdbc:
lob:
non_contextual_creation: true
dialect: org.hibernate.dialect.PostgreSQL9Dialect
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
database-platform: org.hibernate.dialect.PostgreSQLDialect
我终于找到了。
默认物理命名策略的留档指出:
要使用的默认物理命名策略。可以替换为另一个bean,该bean声明:@Replaces(DefaultPhysicalNamingStrategy.class)并实现PhysicalNamingStrategy
这显然意味着实际上无法从应用程序更改物理命名策略。yml。
事实上,实现自定义命名策略bean如下:
@Replaces(DefaultPhysicalNamingStrategy.class)
public class PhysicalNamingStrategyCustom implements PhysicalNamingStrategy
{
@Override
public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment)
{
return name;
}
@Override
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment)
{
return name;
}
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment)
{
return name;
}
@Override
public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment)
{
return name;
}
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment)
{
return name;
}
}
这样一来,JPA/hibernate就不再试图对我的表名和字段名保持聪明了。
问题内容: 我正在使用postgresql数据库和spring + hibernate框架编写应用程序。 我将spring框架从4.1.5.RELEASE升级到4.2.0.RELEASE版本,并将hibernate框架从4.3.7.Final升级到了5.0.0.Final版本。 升级后,我在NamingStrategy中遇到问题。在postgresql数据库中,表列名称以小写字母用下划线分隔,在应
问题内容: 我有简单的spring- jpa配置,在其中配置了Hibernate的。这意味着,如果我的实体类具有一个变量,那么Hibernate应该将其转换为用于查询数据库。但是,在我升级到Hibernate 5之后,这种命名转换就停止了。 错误:“字段列表”中的未知列“ user0_.userName” 这是我的Hibernate配置: 这是我的Entity类: 我不想在@Column批注中显式
我知道我可以用注释命名所有表,并为所有列提供名称,但这不是我想要的解决方案。 不幸的是,我没有找到任何匹配我的案例的策略(我知道这展示了如何创建自定义命名策略,但我不认为我的案例是不常见的),我应该为我的MariaDB配置使用什么命名策略来匹配我的案例?
我有一个spring boot项目,它使用以下设置运行: 我发现hibernate在映射atributes时没有将camelCase转换为SNAKE_CASE,而是将upper_case应用于它(因为Oracle不区分大小写,所以这并不重要): 这是我的实体: 编辑 我发现我的项目使用的是spring Boot1.4.5.发行版,但由于其他无可争议的原因,Hibernate的版本是4.2.19.f
问题内容: 我对hibernate(5.1版)的命名策略有些困惑-即它更改了我的表名,我想避免这种情况。另外- 根据intelij似乎已弃用,但我找不到正确配置它的(另一种)方法。 我在application.properties中具有以下配置: 如前所述,第一个被标记为已练习。 现在我有一个实体: 表格名称是类似usaUploadTable 中的名称。 现在,当我运行我的应用程序时,我得到 表’
我对hibernates(5.1版)的命名策略有点困惑——也就是说,它改变了我的表名,我希望避免这种情况。还有-