Я столкнулся с одной проблемой, которая сводила меня с ума в ее решении. Проблема в следующем: когда я настраиваю соединение с моей базой данных в классе java - это работает хорошо, т.е. создаются таблицы в БД, соответствующие именам моих классов. НО. Когда я пытаюсь использовать файл application.properties вместо java конфигурации класса, все, что правильно именует таблицы, игнорируется, и я не понимаю, что мне делать с этой проблемой (
Например: у меня есть класс с именем как 'ATMResearcher'. Когда я использую класс java для настройки, в моей базе данных есть таблица 'ATMResearcher'. Но когда мои свойства конфигурации описаны в файле app.properties (без использования класса конфигурации), тогда появляется ' Таблица atm_researcher в БД
Надеюсь, кто-нибудь мне поможет. Я предоставляю скриншоты моего класса конфигурации и файла application.properties ниже.
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/someDB
spring.datasource.username=name
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=create
JpaConfig. java файл:
@EnableJpaRepositories(basePackages = "repositories")
@Configuration
@EnableTransactionManagement
public class JpaConfig {
private LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("entities");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
private DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/someDB");
dataSource.setUsername("name");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory((EntityManagerFactory) entityManagerFactory());
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
private Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "create");
properties.setProperty(
"hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return properties;
}
}
ATMResearcher. java
@Data
@Entity(name = "ATMResearcher")
@Table(name = "ATMResearcher")
@NamedQueries({
@NamedQuery(name = ATMResearcher.findByAtm, query = "from ATMResearcher i where i.atm=:name")})
public class ATMResearcher implements Serializable {
private static final long serialVersionUID = 2046903428407635527L;
public static final String findBy = "researcherAtm.findByAtm";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String researcher;
@ColumnDefault(value = "1")
private float volume;
@OneToMany(mappedBy = "atmReseacher", cascade = CascadeType.MERGE, targetEntity = ATMEval.class)
private Set<ATMEval> atmEval;
public String getShortName() {
return Arrays.stream(researcher.split(" ")).filter(n -> n.length() > 2)
.map(n -> n.substring(0, 1).toUpperCase()).collect(Collectors.joining());
}
@Override
public String toString() {
return "ATMResearcher{" +
"id=" + id +
", researcher='" + discipline + '\'' +
'}';
}
}