Spring Boot JPA Релация
Здравейте! От няколко дни се мъча върху ралация в Spring Boot microservice. Таблица products, която има следните полета: name, quantity (броят на продукта наличен в склада), booked, ordered, price. Проблемът е че някои продукти имат подпродукти (не са категории), тоест един продукт (продукт А) има подпродукти (продукт B и C), които са необходими за сглобяването на продукт А. Според мен таблиците би трябвало да изглеждат по следния начин:
Пробвах хиляди неща от интернет примери, клипове, форуми, но никъде няма съчетание между self-relation и m:m релация с допълнителни полета. Имам някакъв написан код за релацията, но тъй като не работи не мисля, че е нужно да го споделям. А това е Product entity:
package ee.profitelgid.book.entities; import com.fasterxml.jackson.annotation.JsonProperty; import org.springframework.data.rest.core.annotation.RestResource; import org.springframework.jmx.export.annotation.ManagedNotification; import org.springframework.security.access.method.P; import javax.persistence.*; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Currency; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "products") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String sku; private String name; private BigDecimal price; @JsonProperty("special_price") @Column(name = "special_price") private BigDecimal specialPrice; private BigInteger quantity; private BigInteger booked; private BigInteger ordered; // constructors, setters and getters }
В това entity мисля че трябва да има Set от продукти (или допълнително entity, което да се явява релацията между продукти и подпродукти) . Какъв е начинът за постигане на желания резултат? Какви annotations да използвам на полетата, които са ключове за релацията? Благодаря предварително!
Здравей!
Първо благодаря за отговора! Подобна релация е възможно и точно с това започнах.. Явно не си забелязал, че на снимката с релацията има допълнителни 2 полета (quantity и price). Извиняам се, че не написах че това е по-важното за релацията. Разреших проблема - допълнително Entity, което съдържа quantity, price, parent (продукт), child (продукт) и двете полета (parent и child) са ManyToOne, а респективно полетата от Product Entity-то са OneToMany към допълнителното Entity. Двете изисквания за създаване на подобна релация са допълнителното Entity да има EmbeddedId и релациите от него JoinColumn-а да има следните props: insertable = false, updatable = false.
Забелязах, че всичките анотации си ги сложил на методите. Това ли е по-добрата практика от поставянето им на полетата?