Получение дочерних объектов (состояние наследования: JOINED) из родительского объекта с отношением «многие ко многим» из другого объекта - PullRequest
0 голосов
/ 12 мая 2019

Если у меня есть сущности (и базовые таблицы), которые связаны со стратегией наследования 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, что хорошо.

Но если я хочу сделать другую сторону (от получения всех Магазинов и их книг), я получаю только Предметы.как объекты, а не книги, что желательно.

Если какой-нибудь приятный способ получить принадлежащие книги для каждого магазина, а не только объекты родительских объектов - элементы?С другой стороны, я хочу иметь возможность получить все объекты, расширяющие Предмет, а не только Книги!

введите описание изображения здесь

Здесь я хочу иметь книги свсю их дополнительную информацию, а не предметы введите описание изображения здесь

Буду благодарен за любые предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...