Czemu JPA ciśnie bym zrobił entity z enuma?

Odpowiedz Nowy wątek
2018-10-29 18:38
0

A po zrobieniu z niego Entity i tak nic nie wczytuje do bazy...

@Entity
public enum OrderStatus {

    CREATED(0, true), 
    DRIVER_ASSIGNED(2, false), 
    ROUTE_ASSIGNED(4, false), 
    SHIPPER_PROCESSING(6, false),
    READY_FOR_REALIZATION(8, true),
    CONVEYED_BY_DRIVER(10, true),
    FINALIZATION_OF_DELIVER(12, true),

    SUCCESSFULLY_FINISHED(20, true),

    CANCELLED(100, true),
    REJECTED_BY_SHIPPER(102, true),
    REJECTED_BY_CLIENT(104, true),
    PAUSED(90, true),
    PAUSED_REQUIRE_CLIENTS_ACTION(92, true),
    OTHER(99, true),
    DEFAULT(98, false);

    @Id
    final int id;
    final boolean visibleForClient;

    OrderStatus(int id, boolean visibleForClient) {
        this.id = id;
        this.visibleForClient = visibleForClient;
    }
}

@Entity
@Table(name = "ORDER_MAIN")
public class Order   {

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

    @Enumerated(value = EnumType.STRING)
    private OrderStatus actualStatus;

    @OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<OrderStatusHistory> statusHistory = new LinkedList<>();

// ....

}

tutaj reszta kodu:
https://github.com/julian4programmers/bellaputanesca

Pozostało 580 znaków

2018-10-29 18:42
1

Nie oznaczaj tego enuma adnotacją @Entity. Powinno pomóc: https://stackoverflow.com/que[...]te-map-enum-by-property-value

edytowany 3x, ostatnio: daw22, 2018-10-29 18:50

Pozostało 580 znaków

2018-10-29 18:55
4

Nie rozumiem twojej koncepcji.
Widzę dwa kierunki (jakie wybrać to kwestia potrzeb):

1) Zakładasz, że te parametry będą niezmienne tzn. CREATED zawsze będzie miało 0 i true itp. -> Wtedy:
OrderStatus jest zwykłym enumem, usuwasz adnotację że jest encją. Tabelę Order rozszerzasz o orderStatus (@Enumerated) i zapisujesz wartość enuma np. CREATED (Kolumna jest Varcharem z wartością enuma) a w kodzie będziesz już pobierał visibleForClient jak będziesz potrzebował na podstawie enuma.

2) Zakładasz, że to jest słownik i wartości mogą ulec zmianie.
Wtedy OrderStatus jest encją ale nie enumem (czyli class) a w Order robisz relację do jednego no i wtedy nie wpisujesz w kodzie na sztywno, tylko można tym zarządzać, bo jest zapisane w bazie.

edytowany 2x, ostatnio: szarotka, 2018-10-29 19:10
Wlaściwie to jest wiele do jednego :P - scibi92 2018-10-29 20:02
Tak wiele do jednego, pisałam na szybko może trochę chaotycznie - szarotka 2018-10-29 20:11

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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