Будет много пользователей и много магазинов.Пользователь может просмотреть, сделать любимым, может оценить магазин.Я должен спроектировать сущности для этого требования.
Я создал сущность пользователя и проверяемую сущность и сущность магазина.
Дизайн сущности, чтобы сделать магазин избранным, кратко поясняется ниже
@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);
для каждого магазина. Мне нужно позвонить в БД, чтобы получить любимый объект.из этого я могу найти, что пользователь сделал этот магазин любимым или нет.
Но я хотел бы знать, каков наилучший подход для решения этой проблемы?
Я должен обрабатывать отзывы и оценки также длямагазин.