Я работаю над профессиональным приложением для социальной сети, использующим couchbase server 4.1 с spring data couchbase 2.2.4 в приложении весенней загрузки с использованием java 1.8.
Я хочу заменить следующий поток, который ищет LikeEntity, конкретной компаниейв базе данных по запросу на основе N1QL, который ищет пользователя с таким же предыдущим безымянным likeEntity:
Вот сервис, содержащий поток для замены запросом:
@Service
class CompanyServiceImpl implements CompanyService{
@Override
public void addCompanyToLike(UserEntity user, Company company){
int incrementValue=1;
LikeEntity existingLike=user.getLikeEntities()
.stream()
.filter(le->le.getCompany().getName().equals(company.getName()))
.findFirst();
//rest of process
}
}
Вотразличные Java-бины, которые вам нужно будет посмотреть:
Класс UserEntity:
@Document
@ViewIndexed(designDoc = "user")
class UserEntity implements Serializable{
@Field private String id;
@Reference
private List<LikeEntity> likeEntities=new ArrayList<LikeEntity>();
//Other attributes plus getters and setters:
}
Класс LikeEntity:
@Document
class LikeEntity implements serializable{
@Reference
private Company company;
@Reference
private Job job;
// other attributes plus getters and setters
}
Как вы видели выше, класс LikeEntity может содержатьЛюбой объект, понравившийся пользователю, это может быть компания, работа или другой объект.Также LikeEntity хранится только в пользовательском документе как элемент списка лайков пользователя, а не в базе данных независимо. Это мой выбор моделирования, потому что LikeEntity не будет использоваться в других Java-бинах моего приложения
Компания:
@Document
@ViewIndexed(designDoc = "company")
class Company implements Serializable{
@Field private String id;
@Field private String name;
//Other attributes plus getters and setters
}
Примечание: я пробовал следующий запрос внутри UserRepository, но он не работал:
UserRepository:
@Repository
@N1qlPrimaryIndexed
@N1qlSecondaryIndexed(indexName = "user")
public interface UserRepository extends CouchbaseRepository<UserEntity, String> {
@Query("SELECT b.*, likeEntity FROM #{#n1ql.bucket} AS b UNNEST b.likeEntities AS likeEntity WHERE b.id=$1 AND likeEntity.company.name=$2")
UserEntity findByLikedCompanyName(String idUser
, String companyName);
}
Я ищуза ваши ответы, и большое спасибо заранее.