У меня есть две таблицы представлены двумя сущностями:Используйте результат запроса одной таблицы/объекта для запроса другого субъекта/таблицы
@Entity
public class HostEntity
{
@NotNull
private String myGroup;
@Id
@NotNull
private String host;
@NotNull
private long inGroupSince;
}
и
@Entity
public class GroupEntity
{
@NotNull
private String groupId;
@Id
@NotNull
private String propertiesStr;
}
У меня есть crudRepository для каждого сущность/таблица.
Таким образом, учитывая два числа, STARTTIME и finishTime, и две строки, stringA и stringB первый - получить все HostEntity.myGroup (назовём это lišta) таким образом, что HostEntity.inGroupSince является между STARTTIME и finishTine, а затем, вернуть все GroupEntity.groupId таким образом, что GroupEntity.groupdId в LISTA и GroupEntity.propertiesStr containt stringA и StringB
W шляпа будет лучшим способом достичь этого? Я могу сделать это в одном запросе?
Im работая в Spring ботинке с crudRepository и своего рода новым для него.
я могу использовать @query аннотаций в repostiroy, например, я получил следующий код:
@Repository
@Profile(Constants.SPRING_PROFILE_DEVELOPMENT)
public interface IGroupsRepositoryDev extends IGroupsRepository
{
@Query("SELECT j FROM GroupEntity j WHERE LOWER(j.propertiesStr) LIKE %?1% and LOWER(j.propertiesStr) LIKE %?2% and LOWER(j.propertiesStr) LIKE %?3%"
+ " and LOWER(j.propertiesStr) LIKE %?4% and LOWER(j.propertiesStr) LIKE %?5% and LOWER(j.propertiesStr) LIKE %?6% and LOWER(j.propertiesStr) LIKE %?7%"
+ " and LOWER(j.propertiesStr) LIKE %?8% and LOWER(j.propertiesStr) LIKE %?9% and LOWER(j.propertiesStr) LIKE %?10% and LOWER(j.propertiesStr) LIKE %?11% ")
List<UUID> findByProperties(String property1,String property2,String property3,String property4,String property5,String property6
,String property7,String property8,String property9,String property10,String property11);
}
которые возвращают каждый GroupEntity таким образом, что GroupEntity.propertiesStr containts 11 строк внутри него
UPDATE
Я использовал следующие, как предложено ниже:
@Query(" SELECT groupId from GroupEntity where groupId IN (SELECT myGroup FROM HostEntity WHERE inGroupSince > ?12 AND inGroupSince < ?13) "
+ "AND LOWER(propertiesStr) LIKE %?1% and LOWER(propertiesStr) LIKE %?2% and LOWER(propertiesStr) LIKE %?3%"
+ " and LOWER(propertiesStr) LIKE %?4% and LOWER(propertiesStr) LIKE %?5% and LOWER(propertiesStr) LIKE %?6% and LOWER(propertiesStr) LIKE %?7%"
+ " and LOWER(propertiesStr) LIKE %?8% and LOWER(propertiesStr) LIKE %?9% and LOWER(propertiesStr) LIKE %?10% and LOWER(propertiesStr) LIKE %?11% ")
List<String> findByPropertiesBetweenTime(String property1,String property2,String property3,String property4,String property5,String property6
,String property7,String property8,String property9,String property10,String property11,long st,long ft);
, и я положил его в репозиторий GroupEntity, но его не работает. Что я делаю не так ?
спасибо, но в котором хранилище я должен поставить его? это не имеет значения? – nadavgam
Извините, я не знакомый с Spring Boot, но использование вышеуказанного запроса с аннотацией @query, как в вашем примере, кажется правдоподобным. – hartwecm