JPA jedna encja na dwie tabele bez @Secondarytable

0

Witam,

Koduje moją pierwszą stronkę MVC, umożliwiającą naukę słówek angielskich z możliwością utworzenia własnej bazy słownej (ang-pol).
Po opracowaniu szablonu graficznego, aspektu rejestracji itd, natrafiłem na duży problem, mianowicie głównej funkcjonalności tej stronki czyli możliwości dodania przez użytkownika swojej bazy słów.

Czy istnieje możliwość w JPA aby na podstawie jednej encji tworzona była nie tylko jedna tabela, a dowolna ilość?

Szukam jakiejś możliwości wyjścia z tego problemu,
@Secondarytable w klasie POJO na sztywno określa liczbę tabel do dodania,
@MappedSuperclass w klasie Abstrakcyjnej bym musiał z góry wiedzieć ile encji jako tabel będzie mi potrzebnych, (jednak to użytkownik miał dodawać samemu nową bazę i rekordy).

Jeśli nie ma możliwość utworzenia nowej tabeli w bazie na podstawie jednej encji, proszę o jakiś pomysł, obecnie jedyne co siedzi mi w głowie to relacja @OneToMany
Gdzie jedna tablica będzie przechowywać kategorię danych słów, a druga bardzo dużą ilość słów różnych kategorii.

Przykładowa klasa POJO którą chciałbym powielać na wiele kategorii słownych:

@Entity
public class Words {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(nullable = false)
    private String english;

    @Column(nullable = false)
    private String polish;

    @Column(nullable = false)
    private String category;
}
2

Prawdopodobnie nie potrzebujesz oddzielnych tabeli. Jeśli chciałbyś, żeby użytkownicy mogli tworzyć własne "bazy słów" dodaj kolumnę identyfikującą dany wpis z konkretną bazą. Możesz użyć @ManyToOne, jeśli w drugiej tabeli chcesz mieć informację np. o tytule bazy, właścicielu itd.

0
VeloxDigitis napisał(a):

Prawdopodobnie nie potrzebujesz oddzielnych tabeli. Jeśli chciałbyś, żeby użytkownicy mogli tworzyć własne "bazy słów" dodaj kolumnę identyfikującą dany wpis z konkretną bazą. Możesz użyć @ManyToOne, jeśli w drugiej tabeli chcesz mieć informację np. o tytule bazy, właścicielu itd.

Jeśli prawidłowo odczytujesz intencje, to w JPA nazywa się to multitenant, warto pogooglać

0

Dobra rozumiem, a czy takiej zapisywanie @ManytoOne gdzie jedna tabela odpowiada za kategorię a druga za trzymanie wszystkich słów to nie jest jakieś nwm.. mało optymalne/przyzwoite ?
Przecież wydaję się że lepiej by było mieć jednego typu encję a w bazie ładnie "jedna kategoria - jedna baza słów". Taka baza przy dużej liczbie słów dodawanej przeze mnie i użytkowników zrobi niezłe kongo, nawet już sprawdzam czy jest jakiś limit wierszy dla tabeli w MySql.
Czy może dobrałem złą technologię pod projekt ? albo w Javie z JPA nie robi się po prostu projektów mojej kategorii ?

2

Czekej czekej, ale dlaczego chcesz tworzyć te nowe tabele? Jak to ma działać? Opisz jakiś use case, bo jestem na 99% pewny, ze chcesz zrobić coś innego :)

3
Arric napisał(a):

Taka baza przy dużej liczbie słów dodawanej przeze mnie i użytkowników zrobi niezłe kongo, nawet już sprawdzam czy jest jakiś limit wierszy dla tabeli w MySql.
Czy może dobrałem złą technologię pod projekt ? albo w Javie z JPA nie robi się po prostu projektów mojej kategorii ?

Nie szukaj wiedzy o limicie wierszy - ta wiedza, zapewniam, nie jest ci potrzebna. Bazy są do tego bdb przygotowane (byle ich nie spieprzyć gdzie indziej). 20 milionow wierszy to zaledwie "średnia tabela"

Nieuzasadnione mnozenie tabel, to wyjmowanie ich indeksów z cache, i wiele innych powodów ku spadku średniej wydajności. Podobnie jak inne techniki "jak się małemu jasiowi wydawało"

0

@Charles_Ray: Pomysł na pracę inżynierską, zrobiłem już z 40% a teraz nwm jak zrobić aby każdy użytkownik, który się zarejestruje mogły stworzyć własną bazę słów Pol-ang, a na na tym później sprawdzanie wiedzy testy może statystyki itd. (takie Dualingo + tworzenie własnych baz). Wiem że mogę wszystko wpakować do jednej encji gdzie byłbym niezły kosmos bo tyle rekordów w jednej to na pewno dużo.
Więc chciałem logicznie rozdzielić:
tab:Animal -> (1. pies-dog, 2. papuga-parrot, itd.) | nowa tabela: Travel ->(1. bagaż-luggage, itd.)
Niż
tab. Category (1. Animal 2.Travel) -> OnetoMany -> (1.pies-dog, 2.bagaż-luggage)

sr. jak trzeba to zrobie schemat na draw.io

0

20 milonów ;d , wow to już się nie boję że da dużo będzie — Arric 2 minuty temu

Nie dalej, jak kilka dni temu użyłem tej liczby wobec klienta, dlaczego nie da sie tego zrobić "od ręki". Tak naprawdę to problemem bylo 17 letnie zabałaganienie projektu jego życzeniami, "jestem za a newet przeciw": itd ... Znaleznienie - jak się wie, czego się szuka i są indeksy (czyli dobry projekt bazy) to poziom 0,1-0,3s
Biada, jak dobrych indeksów nie ma (lub inne babole)

3

Zacznij od jednej tabelki i indeksów. Prawdopodobnie spełni Twoje potrzeby ;D dopiero potem zastanawiaj się nad cache, replikami, partycjonowaniem, nosqlem itp - temat rzeka w zależności pod co się optymalizujesz.

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