Zapisywanie danych do bazy ( Spring, Hibernate )

0

Cześć mam mały problem, ponieważ utworzyłem sobie bazę danych według własnych potrzeb a gdy zapisuję jakiś obiekt do bazy to tworzy mi zupełnie nową tabelę.

Chodzi mi o to, że moją docelową tabelą jest "daneosobowe" a Spring zapisuje mi do te dane do tabeli, którą sam stworzył "dane_osobowe", dodatkowo pojawiła się jeszcze tabela "hibernate_sequence".
screenshot-20181230192122.png

@GetMapping(path = "/add")
@Transactional
public @ResponseBody String addNewUser(){
    DaneOsobowe dane = new DaneOsobowe();
    dane.setPesel("12345565");
    dane.setImie("maciek");
    dane.setNazwisko("kuba");
    dane.setNumerTel("123455677");
    dane.setUlica("objazdowa");
    dane.setMiasto("Poznan");
    dane.setKodPocz("65-001");

    daneOsoboweRepository.save(dane);

      Lekarz lekarz = new Lekarz();
      lekarz.setDaneOsobowe(dane);

      lekarzRepository.save(lekarz);

    return "Saved";

} 

Tutaj jest interfejs

public interface DaneOsoboweRepository extends CrudRepository<DaneOsobowe, Integer> {
}

0

Pokaż konfigurację.

0
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/przychodnia?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=qwerty
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
0

A masz może nad którymś z pól klasy strategy = GenerationType.AUTO? Bo z tego co pamiętam to to powodowało tworzenie tej kolumny w Hibernate przed wersją 5.0, dobrze mówię? Jeśli nie to niech ktoś mnie poprawi.
Natomiast nad klasą musisz chyba dodać @Table(name = "daneosobowe"), bo Hibernate/JPA automatycznie tworzy z nazwy daneOsobowe tabelę dane_osobowe.

Natomiast głowy sobie za to uciąć nie dam, za błędy przepraszam.

0

Jak zmienię mu nazwę tabeli @Table(name = "daneosobowe") to mi wywala błędem ;/

java.sql.SQLException: Field 'idDanych' doesn't have a default value

0

Pokaż kod cały.

0
@Entity
public class DaneOsobowe {

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

    @NotNull
    private String pesel;

    @NotNull
    private String imie;

    @NotNull
    private String nazwisko;

    @NotNull
    private String NumerTel;

    @NotNull
    private String ulica;

    @NotNull
    private String miasto;

    @NotNull
    private String kodPocz;

    public DaneOsobowe(){

    }

plus gettery i settery

@Controller
@RequestMapping(path = "/demo")
public class LekarzController {

    @Autowired
    private DaneOsoboweRepository daneOsoboweRepository;

    @Autowired
    private LekarzRepository lekarzRepository;

    @GetMapping(path = "/add")
    @Transactional
    public @ResponseBody String addNewUser(){
        DaneOsobowe dane = new DaneOsobowe();
        dane.setPesel("12345565");
        dane.setImie("maciek");
        dane.setNazwisko("kuba");
        dane.setNumerTel("123455677");
        dane.setUlica("objazdowa");
        dane.setMiasto("Poznan");
        dane.setKodPocz("65-001");

        daneOsoboweRepository.save(dane);

//        Lekarz lekarz = new Lekarz();
//        lekarz.setDaneOsobowe(dane);
//
//        lekarzRepository.save(lekarz);

        return "Saved";

    }

    @GetMapping(path = "/all")
    public @ResponseBody Iterable<Lekarz> getAll() {
        return lekarzRepository.findAll();
    }

}
public interface DaneOsoboweRepository extends CrudRepository<DaneOsobowe, Integer> {
}

0

Ustaw property spring.jpa.hibernate.ddl-auto na validate i spróbuj jeszcze raz

0

@GeneratedValue(strategy = GenerationType.AUTO) na @GeneratedValue(strategy = GenerationType.IDENTITY) powinno załatwić sprawę hibernate_sequence. Spróbuj też porady @Pinek

0

Jak ustawię w configu opcje validate to mi wywala błędem

 Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [dane_osobowe]

za to jak dam strategy = GenerationType.IDENTITY to wywala mi tak

java.sql.SQLException: Field 'id' doesn't have a default value

chodzi mu o tą linijkę kodu

daneOsoboweRepository.save(dane);
0

Teraz jak ustawiłeś te property co ci mówiłem, to Hibernate nie tworzy tabeli, więc jest to, czego chciałeś. Natomiast w takim razie, Hibernate spodziewa się, że już sam taką tabelę stworzyłeś. Hibernate, na podstawie nazwy klasy, szuka tabeli dane_osobowe i jej nie znajduje. Zmień swoją nazwę tabeli z daneosobowe na dane_osobowe (zgodne z nazywaniem tabel w sql), i wtedy już będzie dobrze (tylko pamiętaj, że za kolejne tabele również ty odpowiadasz)

0

Okej tutaj rozumiem problem, ale dalej mu coś nie pasuje z tym id wyskakuje

java.sql.SQLException: Field 'idDanych' doesn't have a default value

a ma ustawione w klasie

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

@Edit
On sobie sam dodaje pole "id" a nie używa tego co już jest
screenshot-20181230225035.png

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