identifying relationship i mandatory

0

Cześć.

Mam zagwostke. Potrzebuję stworzyć bazę danych na wzór tego.
Screen bazy
Więc muszę zrobić relacje identifying i mandatory. Da się to zrobić od strony spring boota? Za każdym razem jak próbuję z adnotacjami @NotNull, @NotEmpty, optional=false itd. to nic to nie daje, a na internecie coś nie mogę znaleźć rozwiązania. Próbowałem jeszcze z @PrimaryKeyJoinColum, ale co mi nie wychodzi. Tutaj przykładowy kod encji Company i Worker.

@Entity
@Table(name="firma")
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="idFirma")
    private int id;
    @Column(name="nazwa", nullable = false, length = 128)
    private String name;
    @Column(name="adres",length = 256)
    private String adres;
    @OneToMany(mappedBy = "company")
    List<Worker> workerList = new ArrayList<>();
}
@Entity
@Table(name = "pracownik")
public class Worker {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="idPracownika")
    private int id;
    @Column(name="imie", nullable = false, length = 45)
    private String firstName;
    @Column(name="nazwisko", nullable = false, length = 45)
    private String lastName;
    @Column(name="email", length = 45)
    @Email
    private String email;
    @Column(name="telefon", length = 12)
    private String phone;
    @ManyToOne
    @JoinColumn(name = "idFirma", nullable = false)
    Company company;
}

Tutaj co wychodzi. Brak odpowiednich relacji identyifying i mandatorów. Tak samo w relacjach wiele do wielu klucze w pośredniej tabeli nie są ustawione jako primary key.

Screen wygenerowanej bazy

0

Dobra, zrobiłem tą bazę w mysql i dałem w spring na update. Działa identifying, ale jeszcze mandatory mi usuwa. Ktoś ma jakiś pomysł?

@Edit
Zauważyłem tez że gdy ustawiam sie mandatory tworząca diagram, zapisze go do .sql, wczytam tego sql i zrobie reverse engineering to także nie ma ustawionego :f

0

Wygląda na to, że generuje normalnie not null
Poniżej logi z hibernate co robi dla tych encji co wkleiłeś

Hibernate: alter table pracownik drop foreign key FKkjq4b7gp5w6440fvu6jgxcswn
Hibernate: drop table if exists firma
Hibernate: drop table if exists pracownik
Hibernate: create table firma (id_firma integer not null auto_increment, adres varchar(256), nazwa varchar(128) not null, primary key (id_firma)) engine=InnoDB
Hibernate: create table pracownik (id_pracownika integer not null auto_increment, email varchar(45), imie varchar(45) not null, nazwisko varchar(45) not null, telefon varchar(12), id_firma integer not null, primary key (id_pracownika)) engine=InnoDB
Hibernate: alter table pracownik add constraint FKkjq4b7gp5w6440fvu6jgxcswn foreign key (id_firma) references firma (id_firma)
0

czyli chcesz żeby idFirma wchodziła w skład primary_key?

1
create database test1;

Generator hibernate:

Hibernate: drop table if exists firma
Hibernate: drop table if exists pracownik
Hibernate: create table firma (id_firma integer not null auto_increment, adres varchar(256), nazwa varchar(128) not null, primary key (id_firma)) engine=InnoDB
Hibernate: create table pracownik (id_firma integer not null, id bigint not null, email varchar(45), imie varchar(45) not null, nazwisko varchar(45) not null, telefon varchar(12), primary key (id_firma, id)) engine=InnoDB
Hibernate: alter table pracownik add constraint FKkjq4b7gp5w6440fvu6jgxcswn foreign key (id_firma) references firma (id_firma)

Reverse engineering daje na bazie:
screenshot-20200421233002.png

więc chyba wygląda ok

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