Дизайн объектов JPA - PullRequest
0 голосов
/ 23 мая 2018

Будет много пользователей и много магазинов.Пользователь может просмотреть, сделать любимым, может оценить магазин.Я должен спроектировать сущности для этого требования.

Я создал сущность пользователя и проверяемую сущность и сущность магазина.

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

   @Entity
    @Table(name = "favourite")
    public class FavouriteEntity{

    @ManyToOne
    @JoinColumn(name = "user_id", nullable = true)
    private UserEntity userEntity;

    @Type(type="true_false")
    private boolean value;

    @ManyToOne
    @JoinColumn(name = "accessory_id", nullable = true)
    private StoreEntity storeEntity;

    public FavouriteEntity(UserEntity user, boolean value, StoreEntity storeEntity) {
        this.value = value;
        this.storeEntity = accessoryEntity;
        this.userEntity = user;
    }    

    }




@Entity
@Table(name = "store")
public class StoreEntity {

    @OneToMany(cascade = CascadeType.ALL)
    private List<FavouriteEntity> favouriteEntities;

-----------------------------
}

Способ сделать магазин любимым представлен ниже.

public void makeStorefavorite(long storeId, boolean val, long userId) {
        StoreEntity accessoryEntity = storeRepository.findOne(storeId);
        UserEntity userEntity = userRepository.findOne(userId);
        FavouriteEntity fEntity = favouriteRepository.findAccessoryFavourite(storeId, userId);
        if (fEntity == null) {
            fEntity = new FavouriteEntity(userEntity, val, storeEntity);
        } else {
            fEntity.setValue(val);
        }
        storeEntity.getFavouriteEntities().add(fEntity);
        storeRepository.save(storeEntity);
    }

Это хороший дизайн?и когда пользователь хочет увидеть все магазины с избранными деталями, чтобы решить эту проблему с помощью текущего подхода, я должен сначала прочитать все магазины, в каждом магазине будет список избранных объектов, затем я должен проверить пользователяИдентификатор среди этих избранных сущностей, чтобы видеть любимый магазин пользователя или нет.

Я могу решить эту проблему, используя favouriteRepository.findAccessoryFavourite(storeId, userId); для каждого магазина. Мне нужно позвонить в БД, чтобы получить любимый объект.из этого я могу найти, что пользователь сделал этот магазин любимым или нет.

Но я хотел бы знать, каков наилучший подход для решения этой проблемы?

Я должен обрабатывать отзывы и оценки также длямагазин.

1 Ответ

0 голосов
/ 24 мая 2018

(у меня недостаточно кредитов, чтобы комментировать, поэтому я опубликую это как ответ)

У вас может быть эта схема.

Рассмотрим 4 объекта: UserEntity, StoreEntity, FavouriteEntity, ReviewEntity

UserEntity to FavouriteEntity   ---> One to Many (to access all favourites without bothering stores)

UserEntity to ReviewEntity      ---> One to Many

ReviewEntity to StoreEntity     ---> Many to One ( to access all reviews of a store without bothering user)

Как уже упоминал Мэтт, не добавляйте слишком много «сущность».Назовите их Пользователь, Магазин, Фаворит и Обзор.

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