简体   繁体   English

休眠保留关键字转义不起作用

[英]Hibernate Reserved keyword escaping not working

I am getting below error due to the use of MYSQL reserved keywords in hibernate models.由于在休眠模型中使用MYSQL保留关键字,我遇到以下错误。

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'when, who, why) values ('ICL670A - Project Deliverable - HAQ 1 - FDA-IR', null, ' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.15.jar:8.0.15]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.15.jar:8.0.15]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.15.jar:8.0.15]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:970) ~[mysql-connector-java-8.0.15.jar:8.0.15]
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1109) ~[mysql-connector-java-8.0.15.jar:8.0.15]
    at 

I have below property set in my application.properties file, it used to work before, but now it's not working and I am unable to figure out why.我在application.properties文件中设置了以下属性,它以前可以工作,但现在不起作用,我无法弄清楚原因。

spring.jpa.properties.hibernate.globally_quoted_identifiers=true

Now I have to escape the columns manually in my model definition for it to work.现在我必须在我的模型定义中手动转义列才能工作。

@Column(name = "`who`")
private String who;

@Column(name = "`when`")
private Date when;

@Column(name = "`why`")
private String why;

How can I further debug for the same?我怎样才能进一步调试呢? How can I ensure that this property is being picked up?我怎样才能确保这个财产被接受?

We are using multiple DB connections in our spring boot project.我们在 Spring Boot 项目中使用了多个数据库连接。 So all the hibernate properties need to be configured in the DataSourceConfigurationFile所以所有的hibernate属性都需要在DataSourceConfigurationFile进行配置

@Primary
@Bean
public LocalContainerEntityManagerFactoryBean idotdbEntityManager() {
    final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(idotdbDataSource());
    em.setPackagesToScan("com.novartis.idot.model");

    final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    final HashMap<String, Object> properties = new HashMap<>();
    properties.put("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName());
    properties.put("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName());
    properties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.hibernate.ddl-auto"));
    properties.put("hibernate.dialect", env.getProperty("spring.hibernate.dialect"));
    properties.put("hibernate.globally_quoted_identifiers", env.getProperty("spring.jpa.properties.hibernate.globally_quoted_identifiers"));
    properties.put("hibernate.id.new_generator_mappings",  env.getProperty("spring.jpa.properties.hibernate.id.new_generator_mappings"));
    em.setJpaPropertyMap(properties);
    return em;
}


@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSourceProperties idotdbDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource idotdbDataSource() {
    return idotdbDataSourceProperties().initializeDataSourceBuilder().build();
}

@Primary
@Bean
public PlatformTransactionManager idotdbTransactionManager() {
    final JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(idotdbEntityManager().getObject());
    return transactionManager;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM