我对 Spring JPA、Hibernate、MySQL 有疑问。我有一个实体(Nom.java)和存储库(公共接口 NomRepository 扩展了 JpaRepository)。它们的创建和注入都很好。
问题是,当我尝试通过存储库的保存方法保存记录时,spring 抱怨“表”不存在”。事实上,我在 MySQL 中没有看到这个表。你已经尝试过 hibernate.hbm2ddl.auto 的不同值,但它没有帮助。
我使用无 XML 配置顺便说一句。
这是配置文件:
package ru.interosite.awp.config;
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
@Configuration
@ComponentScan("ru.interosite.awp")
@EnableAutoConfiguration
public class AppConfiguration {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/awp");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setPersistenceUnitName("my_pu");
lef.setPackagesToScan("ru.interosite.awp.data");
lef.setDataSource(dataSource);
lef.setJpaVendorAdapter(jpaVendorAdapter);
lef.setJpaProperties(getJpaProperties());
return lef;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setDatabase(Database.MYSQL);
jpaVendorAdapter.setGenerateDdl(true);
jpaVendorAdapter.setShowSql(true);
jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
return jpaVendorAdapter;
}
private Properties getJpaProperties() {
return new Properties() {
{
setProperty("hibernate.hbm2ddl.auto", "update");
setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
setProperty("hibernate.show_sql", "true");
setProperty("hibernate.format_sql", "true");
}
};
}
}
这是我启动应用程序的方式:
package ru.interosite.awp;
import java.awt.Font;
import javax.swing.UIManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ApplicationContext;
import ru.interosite.awp.config.AppConfiguration;
import ru.interosite.awp.gui.UIUtils;
public class Boot {
private static final Logger LOGGER = LoggerFactory.getLogger(Boot.class);
public static void main( String[] args )
{
UIUtils.setUIFont(new javax.swing.plaf.FontUIResource(Font.SANS_SERIF, Font.PLAIN, 16));
try {
String lafClassName = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(lafClassName);
} catch (Exception e) {
LOGGER.debug(e.getMessage());
}
ApplicationContext ctx = SpringApplication.run(AppConfiguration.class, args);
((Runner)ctx.getBean("runner")).start();
}
}
这是我的 pom.xml:
<?xml 版本="1.0" 编码="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>ru.interosite</groupId> <artifactId>AWP</artifactId> <version>1.0-SNAPSHOT</version> <包装>罐子</包装> <name>AWP</name> <url>http://maven.apache.org</url> <属性> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <start-class>ru.interosite.awp.Runner</start-class> </属性> <父> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <版本>0.5.0.M4</版本> </父> <依赖项> <依赖> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </依赖> <依赖> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> </依赖> <依赖> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </依赖> <依赖> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </依赖> <依赖> <groupId>org.hibernate</groupId> <artifactId>休眠实体管理器</artifactId> </依赖> <依赖> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <版本>5.1.26</版本> </依赖> <依赖> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <版本>1.9.5</版本> </依赖> </依赖> <构建> <插件> <插件> <artifactId>maven-compiler-plugin</artifactId> <版本>2.3.2</版本> </插件> <插件> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </插件> </插件> </build> <存储库> <存储库> <id>弹簧快照</id> <name>春季快照</name> <url>http://repo.spring.io/libs-snapshot</url> <快照> <启用>真</启用> </快照> </repository> <存储库> <id>春天的里程碑</id> <name>春季里程碑</name> <url>http://repo.spring.io/libs-milestone</url> <快照> <启用>假</启用> </快照> </repository> <存储库> <id>org.jboss.repository.releases</id> <name>JBoss Maven 发布存储库</name> <url>https://repository.jboss.org/nexus/content/repositories/releases</url> <快照> <启用>假</启用> </快照> </repository> </存储库> <pluginRepositories> <插件库> <id>弹簧快照</id> <name>春季快照</name> <url>http://repo.spring.io/libs-snapshot</url> <快照> <启用>真</启用> </快照> </pluginRepository> <插件库> <id>春天的里程碑</id> <name>春季里程碑</name> <url>http://repo.spring.io/libs-milestone</url> <快照> <启用>假</启用> </快照> </pluginRepository> </pluginRepositories> </项目>