identifying relationship i mandatory

identifying relationship i mandatory
B9
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:65
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.

Kopiuj
@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<>();
}
Kopiuj
@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

edytowany 2x, ostatnio: brus97
B9
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:65
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

edytowany 1x, ostatnio: brus97
JA
  • Rejestracja:około 6 lat
  • Ostatnio:około 14 godzin
  • Postów:52
0

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

Kopiuj
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)
B9
Tak, jeżeli chodzi o notnulle w ustawieniach tabeli to jest ok, ale na diagramie już usuwa to "kółeczko" oznaczające opcjonalnie.
JA
  • Rejestracja:około 6 lat
  • Ostatnio:około 14 godzin
  • Postów:52
0

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

B9
Znaczy to już się udało. Chodzi mi już tylko czemu mantadory się usuwa przy reverse engineering
JA
  • Rejestracja:około 6 lat
  • Ostatnio:około 14 godzin
  • Postów:52
1
Kopiuj
create database test1;

Generator hibernate:

Kopiuj
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

B9
Oprócz tego jednego. Kak zerkniesz do screena bazy w pierwszym poście to zobaczysz że jest kółeczko przy relacji od strony pracownika. Czyli na diagramie pokazuje to że firma może mieć pracownika, ale pracownik musi mieć firme i tutaj się własnie to nie pokazuje/usuwa.
JA
a zrób to ręcznie bez javy bez niczego, wyklikaj bazę w workbenchu i daj forward engineering a potem to zaczytaj przez reverse engineering i zobacz czy dostaniesz taki sam obrazek
JA
bo jak dla mnie to tutaj jest ok, nie możesz stworzyć pracownika bez firmy bo jest to wymagane w PK
B9
Właśnie tez usuwa to kółko, nawet jak robie ręcznie :/ Dziwne to
JA
więc jak widzisz to jest problem workbencha a nie javy
B9
To zostawiam jak jest :d

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.