Если у меня есть сущности (и базовые таблицы), которые связаны со стратегией наследования JOINED.В моей программе есть родительский объект Item и дочерний объект Book.
// Элемент Item
package bookstore.entity.item;
@Data
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type_of_item") // not required in JOINED but enahances performance
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "item_seq")
@SequenceGenerator(name = "item_seq", sequenceName = "item_seq", allocationSize = 1)
private long id;
@Column(name = "name")
private String name;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "item")
private List<StoreItem> storeItems;
private int numberOfAvailableItems;
}
// Объект Book
package bookstore.entity.item.books;
/**
* @author lukasz.krysta.ext
*
*/
@Entity
@Data
//@DiscriminatorValue("Book")
public class Book extends Item {
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "isbn")
private String isbn;
}
Помимо этого у меня есть хранилище сущностей, которое связывает Item через Entity StoreItem, поэтому мы де-факто реализовали принцип «многие ко многим» как один-ко-многим из Item в StreItem и один-к-одному.многие из Store в StoreItem.
package bookstore.entity.store;
@Entity
@Table(name = "store")
@Data
public class Store {
private static final String ID_STORE = "id_store";
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "store_seq")
@SequenceGenerator(name = "store_seq", sequenceName = "store_seq", allocationSize = 1)
private long id;
private String name;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "store")
private List<StoreItem> storeItems;
}
// StoreItem - здесь у нас есть Store и Item в виде полей.
@Entity
@Data
public class StoreItem {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="store_item_seq")
@SequenceGenerator(name="store_item_seq", sequenceName="store_item_seq", allocationSize=1)
private long id;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_store" /*,insertable = false, updatable = false*/)
private Store store;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_item" /*,insertable = false, updatable = false*/)
private Item item;
@Column(name = "number_of_available_items_in_store")
private int nubmerOfAvailableItemsInStore;
}
Теперь, в Почтальоне, когда я получаю все Книги, я также получаю Магазины через объекты StoreItem, что хорошо.
Но если я хочу сделать другую сторону (от получения всех Магазинов и их книг), я получаю только Предметы.как объекты, а не книги, что желательно.
Если какой-нибудь приятный способ получить принадлежащие книги для каждого магазина, а не только объекты родительских объектов - элементы?С другой стороны, я хочу иметь возможность получить все объекты, расширяющие Предмет, а не только Книги!
введите описание изображения здесь
Здесь я хочу иметь книги свсю их дополнительную информацию, а не предметы введите описание изображения здесь
Буду благодарен за любые предложения.