繁体   English   中英

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

[英]Hibernate Reserved keyword escaping not working

由于在休眠模型中使用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 

我在application.properties文件中设置了以下属性,它以前可以工作,但现在不起作用,我无法弄清楚原因。

spring.jpa.properties.hibernate.globally_quoted_identifiers=true

现在我必须在我的模型定义中手动转义列才能工作。

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

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

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

我怎样才能进一步调试呢? 我怎样才能确保这个财产被接受?

我们在 Spring Boot 项目中使用了多个数据库连接。 所以所有的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