Spring zapisywanie do bazy danych

0

Tabela tworzy się w moim projekcie, natomiast nie jest zapełniana kontentem. Zdaje się, że sama metoda run się nie odpala i nie wiem czemu. Niestety konsola nie chce pomóc rzucając jakimś błędem.
1.

public class Starter implements CommandLineRunner {
	
	@PersistenceContext
	private EntityManager em;

	@Override
	public void run(String... args) throws Exception {
		System.out.println("control point0"); // nie ma tego w konsoli
		
		Employee employee = new Employee();
		employee.setFirstName("Januszzzz");
		employee.setLastName("zzzzzzz");
		employee.setSalary(3333.3);
		
		createEmployee(employee);
		createEmployee(employee);
		
		System.out.println("control point1");
		System.out.println(getEmployee(employee).getFirstName());
	}
	
	@Transactional
	public void createEmployee(Employee employee) {
		em.persist(employee);
	}
	
	@Transactional
	public Employee getEmployee(Employee employee) {
		return em.find(employee.getClass(), 1);
	}

}
@Entity
@Component
public class Employee {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String firstName;

	private String lastName;

	private double salary;

	public Employee() {
	}
	//...
}
  1. properties
## MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/mojschemat
spring.datasource.username=tutorial
spring.datasource.password=password

#hibernate_sequence doesn't exist
spring.jpa.hibernate.use-new-id-generator-mappings=false

spring.jpa.hibernate.ddl-auto=create

Oczywiście wiem, że tranzakcje powinny mieć swoją własną klasę. Później to zrobię.
8.0.17 MySQL Community Server, Java 12.

0

createEmployee() jest metodą na tej samej klasie, więc transakcja się nie założy. Spróbuj przenieść to do innego beana.

Poza tym warto by jednak ustalić czy run() się odpala czy nie ;D Jakim błędem rzuca konsola? ta klasa jest w ogóle widoczna dla Springa? Jak ją rejestrujesz?

Kolejna rzecz - dlaczego encja jest komponentem?? ;)

0

Tranzakcje przeniosłem do EmployeeRepository. Komponent rzeczywiście jest niepotrzebny, zmagałem się z tutorialem z yt, w którym springa nie było, a properties się zapisywało w meta-inf. Generalnie chcę się czegoś więcej dowiedzieć o hibernate i do tego dążę.
Napisu "control point0" nie ma w konsoli więc wnioskuję że się nie odpala i mnie to niezmiernie dziwi. Co do pytania jak ją rejestruję, nie za bardzo wiem o co pytasz :)

0

Pytam o to, kto ma wywołać tego runa?

0

implementuję CommandLineRunnera więc ta metoda powinna się odpalić wkrótce po uruchomieniu springa (SpringApplication.run()), przynajmniej ja tak to rozumiem.
https://dzone.com/articles/spring-boot-applicationrunner-and-commandlinerunne

0

Ale Spring go nie widzi. Dodaj @Component na tej klasie.

0

Dzięki, zadziałało :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1