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

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

1

Nie oznaczaj tego enuma adnotacją @Entity. Powinno pomóc: https://stackoverflow.com/questions/41625756/hibernate-map-enum-by-property-value

6

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.

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