eu gostaria de saber se há um meio de criar as tabelas via spring boot. Afinal, até aqui, me parece, que usamos o jdbc puro. Mas em outros projetos, via configurações pela persistence.xml, a gente pode configurar o hibernate para criar as tabelas.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
eu gostaria de saber se há um meio de criar as tabelas via spring boot. Afinal, até aqui, me parece, que usamos o jdbc puro. Mas em outros projetos, via configurações pela persistence.xml, a gente pode configurar o hibernate para criar as tabelas.
Tenta no application.properties a configuração
spring.jpa.hibernate.ddl-auto=update
só isso não basta. Tive uns erros. Vou mostrar como está aqui. MAIN:
@SpringBootApplication
public class ForIt{
public static void main(String[] args) {
SpringApplication.run(ForIt.class, args);
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource data = new DriverManagerDataSource();
data.setDriverClassName("com.mysql.jdbc.Driver");
data.setUrl("jdbc:mysql://localhost:3306/forit");
data.setUsername("root");
data.setPassword("root");
return data;
}
}application.properties:
spring.jpa.hibernate.ddl-auto=updateEntidades. Abstrai os gets, sets e construtores:
@Entity
public class Address {
@Id @GeneratedValue
private int id;
@NotNull
private String street;
@NotNull
private String number;
@NotNull
private String city;
@Entity
public class Job {
@Id @GeneratedValue
private int id;
@NotNull
private ExperienceLevel level;
@NotNull
private String programmingLanguage;
@NotNull
private double salary;
private Address jobAdress;
controller:
@Controller
public class JobController {
@Autowired
private JobRepository jobRepository;
@RequestMapping("/jobs")
public String jobs(Model model) {
Iterable<Job> jobs = this.jobRepository.findAll();
model.addAttribute("jobs",jobs);
return "jobs";
}
AQUI TA O ERRO
2018-08-27 09:51:37.555 INFO 8868 --- [ main] br.com.jp.forIt.ForIt : Starting ForIt on vinicius-VPCEG17FB with PID 8868 (/home/vinicius/Documentos/forIt/target/classes started by vinicius in /home/vinicius/Documentos/forIt)
2018-08-27 09:51:37.560 INFO 8868 --- [ main] br.com.jp.forIt.ForIt : No active profile set, falling back to default profiles: default
2018-08-27 09:51:38.029 INFO 8868 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@28c4711c: startup date [Mon Aug 27 09:51:38 BRT 2018]; root of context hierarchy
2018-08-27 09:51:40.674 INFO 8868 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2018-08-27 09:51:40.701 INFO 8868 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2018-08-27 09:51:40.702 INFO 8868 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.14
2018-08-27 09:51:40.944 INFO 8868 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2018-08-27 09:51:40.945 INFO 8868 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2921 ms
2018-08-27 09:51:41.200 INFO 8868 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2018-08-27 09:51:41.206 INFO 8868 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-08-27 09:51:41.207 INFO 8868 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-08-27 09:51:41.207 INFO 8868 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-08-27 09:51:41.208 INFO 8868 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2018-08-27 09:51:41.283 INFO 8868 --- [ main] o.s.j.d.DriverManagerDataSource : Loaded JDBC driver: com.mysql.jdbc.Driver
2018-08-27 09:51:41.973 INFO 8868 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2018-08-27 09:51:42.003 INFO 8868 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2018-08-27 09:51:42.128 INFO 8868 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.12.Final}
2018-08-27 09:51:42.130 INFO 8868 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2018-08-27 09:51:42.132 INFO 8868 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2018-08-27 09:51:42.188 INFO 8868 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-08-27 09:51:42.430 INFO 8868 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2018-08-27 09:51:42.690 WARN 8868 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
2018-08-27 09:51:42.692 INFO 8868 --- [ main] o.apache.catalina.core.StandardService : Stopping service Tomcat
2018-08-27 09:51:42.713 INFO 8868 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2018-08-27 09:51:42.721 ERROR 8868 --- [ main] o.s.boot.SpringApplication : Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: I
https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa
No passo 6 , acredito que a definição do DataSource deve ficar em uma classe com @Configuration , ou realizar toda a configuração no properties.
eu já resolvi. Fiz toda a configuração no properties e as tabelas foram criadas quando eu fiz o mapeamento @ManytoOne...
etc. obrigado