我目前正在使用最新的Spring (运行在JDK1.8上),我已经从本链接中的教程下载了源代码:访问-数据-mysql
我尝试使用Tomcat运行它,它显示INFO: Server startup in 4581 ms,但是当我访问链接localhost:8080/demo/all时,页面显示"HTTP 404“,控制台没有显示任何附加日志。当我检查数据库时,表"User“也不是自动创建的。
我刚开始从零开始学习春训,我觉得很困惑.预先感谢您的帮助,任何关于如何解决我的问题的想法都将不胜感激。
谢谢。
发布于 2018-04-09 17:32:22
最后,我白手起家地创建了自己的项目,而不是导入现有的项目。解决了Hibernate不能自动创建表的错误是在application.properties中替换了这一行:
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect对此:
spring.jpa.database=MYSQL我遵循了关于这个链接的建议:当与JPA一起使用时,Hibernate如何在数据库中自动创建表?
但是,没有找到与所提供文件的链接,回答问题的人也没有在他的帖子中解释。
感谢所有花时间帮我的人。
发布于 2018-03-17 07:45:04
404错误是页面未找到的错误,因此您可能正在编写与您在控制器中指定的内容不同的url。没有自动创建表,因为您还没有设置以下属性: spring.jpa.hibernate.ddl-auto=update
在应用程序.properties中,编写以下代码:
server.port=8095
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=newuser
spring.datasource.password=newuser
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
我假设您使用的是oracle数据库。
发布于 2018-03-17 09:44:54
由于您使用的是MySql,我建议您尝试这个.properties配置:
spring.datasource.username=<user_name>
spring.datasource.password=<password>
spring.datasource.url=jdbc:mysql://localhost:3306/<db_name>?createDatabaseIfNotExist=true&useSSL=false我正在几个Spring应用程序上使用这个,它对我来说很好。这将自动创建数据库并运行DDL来创建初始架构。请注意,我使用的是自定义的DatabaConfiguration类,它处理所有的设置和管理。在以下几行中:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("<where_repos_are_found>")
public class DatabaseConfiguration {
private static final String[] PACKAGES_TO_SCAN = { "<packages_locations>" };
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "spring.datasource.password";
private static final String PROPERTY_NAME_DATABASE_URL = "spring.datasource.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "spring.datasource.username";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_DATABASE_DRIVER = "hibernate.connection.driver_class";
private static final String PROPERTY_NAME_HIBERNATE_DDL = "hibernate.hbm2ddl.auto";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
private static final String PROPERTY_NAME_HIBERNATE_USE_SQL_COMMENTS = "hibernate.use_sql_comments";
private Environment env;
@Autowired
public DatabaseConfiguration(Environment env) { this.env = env; }
@Bean
public DataSource getDatasource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put(PROPERTY_NAME_HIBERNATE_DATABASE_DRIVER, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DATABASE_DRIVER));
properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
properties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, env.getProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
properties.put(PROPERTY_NAME_HIBERNATE_USE_SQL_COMMENTS, env.getProperty(PROPERTY_NAME_HIBERNATE_USE_SQL_COMMENTS));
properties.put(PROPERTY_NAME_HIBERNATE_DDL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DDL));
return properties;
}
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(getDatasource());
entityManagerFactoryBean.setPackagesToScan(PACKAGES_TO_SCAN);
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
entityManagerFactoryBean.setJpaProperties(getHibernateProperties());
return entityManagerFactoryBean;
}
@Bean
public JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return transactionManager;
}
}另外,为了任何目的,我使用hibernate自己的属性,而不是Spring的属性,例如这个:
hibernate.hbm2ddl.auto=create
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.use_sql_comments=true
hibernate.connection.driver_class=com.mysql.jdbc.Driver最后,关于你得到的404,我认为你的链接可能是错误的。我建议打开debug日志属性,以便在应用程序启动后更好地检查各种映射。
您可以通过设置logging.level.<package_name_of_your_app>=debug来做到这一点。
https://stackoverflow.com/questions/49333495
复制相似问题