From 6206d5fcb2c13852b5c1cd2a03f126bcf4d233df Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Fri, 23 Jun 2017 18:20:24 +0300 Subject: [PATCH] Native-query changed to JPA --- .../dao/model/sql/AdminSettingsEntity.java | 2 +- .../server/dao/model/sql/AlarmEntity.java | 2 +- .../server/dao/model/sql/AssetEntity.java | 2 +- .../model/sql/ComponentDescriptorEntity.java | 2 +- .../server/dao/model/sql/CustomerEntity.java | 2 +- .../server/dao/model/sql/DashboardEntity.java | 2 +- .../server/dao/model/sql/DeviceEntity.java | 2 +- .../server/dao/model/sql/EventEntity.java | 2 +- .../dao/model/sql/PluginMetaDataEntity.java | 4 +- .../server/dao/model/sql/RelationEntity.java | 2 +- .../dao/model/sql/RuleMetaDataEntity.java | 8 +-- .../server/dao/model/sql/TenantEntity.java | 2 +- .../server/dao/model/sql/UserEntity.java | 2 +- .../dao/model/sql/WidgetTypeEntity.java | 2 +- .../dao/model/sql/WidgetsBundleEntity.java | 7 --- .../server/dao/sql/alarm/AlarmRepository.java | 16 +++-- .../server/dao/sql/alarm/JpaAlarmDao.java | 16 +++-- .../server/dao/sql/asset/AssetRepository.java | 58 +++++++++--------- .../server/dao/sql/asset/JpaAssetDao.java | 26 ++++---- .../ComponentDescriptorRepository.java | 25 ++++---- .../JpaBaseComponentDescriptorDao.java | 14 +++-- .../dao/sql/customer/CustomerRepository.java | 13 ++-- .../dao/sql/customer/JpaCustomerDao.java | 9 ++- .../dashboard/DashboardInfoRepository.java | 29 ++++----- .../sql/dashboard/JpaDashboardInfoDao.java | 14 +++-- .../dao/sql/device/DeviceRepository.java | 59 ++++++++++--------- .../server/dao/sql/device/JpaDeviceDao.java | 29 ++++----- .../dao/sql/plugin/JpaBasePluginDao.java | 14 +++-- .../sql/plugin/PluginMetaDataRepository.java | 25 ++++---- .../server/dao/sql/rule/JpaBaseRuleDao.java | 14 +++-- .../dao/sql/rule/RuleMetaDataRepository.java | 25 ++++---- .../server/dao/sql/tenant/JpaTenantDao.java | 8 ++- .../dao/sql/tenant/TenantRepository.java | 13 ++-- .../dao/sql/timeseries/JpaTimeseriesDao.java | 33 ++++++++++- .../server/dao/sql/user/JpaUserDao.java | 15 ++--- .../server/dao/sql/user/UserRepository.java | 14 +++-- .../dao/sql/widget/JpaWidgetsBundleDao.java | 20 ++++--- .../sql/widget/WidgetsBundleRepository.java | 37 ++++++------ .../server/dao/sql/alarm/JpaAlarmDaoTest.java | 3 +- dao/src/test/resources/jpa-test.properties | 6 +- 40 files changed, 320 insertions(+), 258 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java index e268c4577f..6c98466b83 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java @@ -47,7 +47,7 @@ public final class AdminSettingsEntity implements BaseEntity { private String key; @Type(type = "json") - @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY, columnDefinition = "json") + @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY) private JsonNode jsonValue; public AdminSettingsEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java index d9f6623f0b..2107a5ff36 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java @@ -82,7 +82,7 @@ public final class AlarmEntity implements BaseEntity { private Long clearTs; @Type(type = "json") - @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY) private JsonNode details; @Column(name = ALARM_PROPAGATE_PROPERTY) diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java index bd24fbdd06..5d24aeb7bb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java @@ -62,7 +62,7 @@ public final class AssetEntity implements SearchTextEntity { private String searchText; @Type(type = "json") - @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public AssetEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java index 2da59a7552..eee91372eb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java @@ -58,7 +58,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity { private String email; @Type(type = "json") - @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public CustomerEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java index 2153db2fa8..5266b90048 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DashboardEntity.java @@ -57,7 +57,7 @@ public final class DashboardEntity implements SearchTextEntity { private String searchText; @Type(type = "json") - @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY) private JsonNode configuration; public DashboardEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java index 06c90658ec..f4c8dd2989 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java @@ -60,7 +60,7 @@ public final class DeviceEntity implements SearchTextEntity { private String searchText; @Type(type = "json") - @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public DeviceEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java index 033aaa5fdf..ff7968718a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java @@ -63,7 +63,7 @@ public class EventEntity implements BaseEntity { private String eventUid; @Type(type = "json") - @Column(name = EVENT_BODY_PROPERTY, columnDefinition = "json") + @Column(name = EVENT_BODY_PROPERTY) private JsonNode body; public EventEntity(Event event) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java index 3972310d3d..a53c1ab007 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java @@ -63,11 +63,11 @@ public class PluginMetaDataEntity implements SearchTextEntity { private ComponentLifecycleState state; @Type(type = "json") - @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY) private JsonNode configuration; @Type(type = "json") - @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java index 3ee09d42ae..d13a7ef4da 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java @@ -62,7 +62,7 @@ public final class RelationEntity implements ToData { private String relationType; @Type(type = "json") - @Column(name = ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public RelationEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java index 6191672c9e..33971c348d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java @@ -64,19 +64,19 @@ public class RuleMetaDataEntity implements SearchTextEntity { private String pluginToken; @Type(type = "json") - @Column(name = ModelConstants.RULE_FILTERS, columnDefinition = "json") + @Column(name = ModelConstants.RULE_FILTERS) private JsonNode filters; @Type(type = "json") - @Column(name = ModelConstants.RULE_PROCESSOR, columnDefinition = "json") + @Column(name = ModelConstants.RULE_PROCESSOR) private JsonNode processor; @Type(type = "json") - @Column(name = ModelConstants.RULE_ACTION, columnDefinition = "json") + @Column(name = ModelConstants.RULE_ACTION) private JsonNode action; @Type(type = "json") - @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public RuleMetaDataEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java index 755ca8c64c..19cfe4b450 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TenantEntity.java @@ -76,7 +76,7 @@ public final class TenantEntity implements SearchTextEntity { private String email; @Type(type="json") - @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public TenantEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java index f76b2d8da9..ccfaba10d6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java @@ -70,7 +70,7 @@ public class UserEntity implements SearchTextEntity { private String lastName; @Type(type="json") - @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY) private JsonNode additionalInfo; public UserEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java index 4f96b6445a..38f83cb128 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetTypeEntity.java @@ -56,7 +56,7 @@ public final class WidgetTypeEntity implements BaseEntity { private String name; @Type(type="json") - @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY, columnDefinition = "json") + @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY) private JsonNode descriptor; public WidgetTypeEntity() { diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java index 90b1b71303..c7d62d8037 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/WidgetsBundleEntity.java @@ -51,9 +51,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity { - @Query(nativeQuery = true, value = "SELECT * FROM ALARM WHERE TENANT_ID = :tenantId AND ORIGINATOR_ID = :originatorId " + - "AND ORIGINATOR_TYPE = :entityType AND TYPE = :alarmType ORDER BY TYPE ASC, ID DESC LIMIT 1") - AlarmEntity findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId, - @Param("originatorId") UUID originatorId, - @Param("entityType") int entityType, - @Param("alarmType") String alarmType); + @Query("SELECT a FROM AlarmEntity a WHERE a.tenantId = :tenantId AND a.originatorId = :originatorId " + + "AND a.originatorType = :entityType AND a.type = :alarmType ORDER BY a.type ASC, a.id DESC") + List findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId, + @Param("originatorId") UUID originatorId, + @Param("entityType") EntityType entityType, + @Param("alarmType") String alarmType, + Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java index 5517ec1601..322afe7f67 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java @@ -21,6 +21,7 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -74,12 +75,15 @@ public class JpaAlarmDao extends JpaAbstractDao implements A @Override @Transactional(propagation = REQUIRES_NEW) public ListenableFuture findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) { - return service.submit(() -> - DaoUtil.getData(alarmRepository.findLatestByOriginatorAndType( - tenantId.getId(), - originator.getId(), - originator.getEntityType().ordinal(), - type))); + return service.submit(() -> { + List latest = alarmRepository.findLatestByOriginatorAndType( + tenantId.getId(), + originator.getId(), + originator.getEntityType(), + type, + new PageRequest(0, 1)); + return latest.isEmpty() ? null : DaoUtil.getData(latest.get(0)); + }); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java index 3f5e4915b9..8f86437adb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java @@ -15,6 +15,8 @@ */ package org.thingsboard.server.dao.sql.asset; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -31,23 +33,23 @@ import java.util.UUID; @SqlDao public interface AssetRepository extends CrudRepository { - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND a.id > :idOffset ORDER BY a.id") + List findByTenantId(@Param("tenantId") UUID tenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + - "AND CUSTOMER_ID = :customerId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndCustomerId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + + "AND a.customerId = :customerId " + + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND a.id > :idOffset ORDER BY a.id") + List findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId, @Param("customerId") UUID customerId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); List findByTenantIdAndIdIn(UUID tenantId, List assetIds); @@ -55,27 +57,27 @@ public interface AssetRepository extends CrudRepository { AssetEntity findByTenantIdAndName(UUID tenantId, String name); - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + - "AND TYPE = :type " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndType(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + + "AND a.type = :type " + + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND a.id > :idOffset ORDER BY a.id") + List findByTenantIdAndType(@Param("tenantId") UUID tenantId, @Param("type") String type, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + - "AND CUSTOMER_ID = :customerId AND TYPE = :type " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndCustomerIdAndType(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + + "AND a.customerId = :customerId AND a.type = :type " + + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND a.id > :idOffset ORDER BY a.id") + List findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId, @Param("customerId") UUID customerId, @Param("type") String type, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(value = "SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type") + @Query("SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type") List findTenantAssetTypes(); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java index 39f8111109..500b612918 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.asset; import com.google.common.util.concurrent.ListenableFuture; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.asset.Asset; @@ -29,6 +30,7 @@ import org.thingsboard.server.dao.model.sql.AssetEntity; import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -58,10 +60,10 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao im public List findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) { return DaoUtil.convertDataList(assetRepository .findByTenantId( - pageLink.getLimit(), tenantId, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override @@ -74,11 +76,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao im public List findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { return DaoUtil.convertDataList(assetRepository .findByTenantIdAndCustomerId( - pageLink.getLimit(), tenantId, customerId, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override @@ -97,23 +99,23 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao im public List findAssetsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { return DaoUtil.convertDataList(assetRepository .findByTenantIdAndType( - pageLink.getLimit(), tenantId, type, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override public List findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { return DaoUtil.convertDataList(assetRepository .findByTenantIdAndCustomerIdAndType( - pageLink.getLimit(), tenantId, customerId, type, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java index e86b838213..f15bbbf5ad 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.component; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -32,22 +33,22 @@ public interface ComponentDescriptorRepository extends CrudRepository :idOffset ORDER BY ID LIMIT :limit") - List findByType(@Param("limit") int limit, - @Param("type") String type, + @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " + + "AND LOWER(cd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND cd.id > :idOffset ORDER BY cd.id") + List findByType(@Param("type") String type, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " + - "AND SCOPE = :scope AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByScopeAndType(@Param("limit") int limit, - @Param("type") String type, + @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " + + "AND cd.scope = :scope AND LOWER(cd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND cd.id > :idOffset ORDER BY cd.id") + List findByScopeAndType(@Param("type") String type, @Param("scope") String scope, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); void deleteByClazz(String clazz); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java index 023e7a5a01..e259bba06e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.component; import com.datastax.driver.core.utils.UUIDs; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.ComponentDescriptorId; @@ -31,6 +32,7 @@ import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity; import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -83,21 +85,21 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { return DaoUtil.convertDataList(componentDescriptorRepository .findByType( - pageLink.getLimit(), type.toString(), - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override public List findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { return DaoUtil.convertDataList(componentDescriptorRepository .findByScopeAndType( - pageLink.getLimit(), type.toString(), scope.toString(), - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java index 0bf4f13943..009f926b2e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/CustomerRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.customer; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -30,13 +31,13 @@ import java.util.UUID; @SqlDao public interface CustomerRepository extends CrudRepository { - @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = :tenantId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT c FROM CustomerEntity c WHERE c.tenantId = :tenantId " + + "AND LOWER(c.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND c.id > :idOffset ORDER BY c.id") + List findByTenantId(@Param("tenantId") UUID tenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java index d5ae9aba83..de54835c1a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/customer/JpaCustomerDao.java @@ -16,6 +16,7 @@ package org.thingsboard.server.dao.sql.customer; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.Customer; @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.CustomerEntity; import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -54,8 +56,11 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { - return DaoUtil.convertDataList(customerRepository.findByTenantId(pageLink.getLimit(), tenantId, - pageLink.getTextSearch(), pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + return DaoUtil.convertDataList(customerRepository.findByTenantId( + tenantId, + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java index a4e3412c35..2569867096 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.dashboard; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -30,20 +31,20 @@ import java.util.UUID; @SqlDao public interface DashboardInfoRepository extends CrudRepository { - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, - @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " + + "AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + + "AND di.id > :idOffset ORDER BY di.id") + List findByTenantId(@Param("tenantId") UUID tenantId, + @Param("searchText") String searchText, + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " + - "AND CUSTOMER_ID = :customerId AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndCustomerId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " + + "AND di.customerId = :customerId AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + + "AND di.id > :idOffset ORDER BY di.id") + List findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId, @Param("customerId") UUID customerId, - @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("searchText") String searchText, + @Param("idOffset") UUID idOffset, + Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java index d1d2b776d6..c604c7e4ef 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java @@ -16,6 +16,7 @@ package org.thingsboard.server.dao.sql.dashboard; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.DashboardInfo; @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.DashboardInfoEntity; import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import java.util.List; +import java.util.Objects; import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -55,20 +57,20 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { return DaoUtil.convertDataList(dashboardInfoRepository .findByTenantId( - pageLink.getLimit(), tenantId, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override public List findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { return DaoUtil.convertDataList(dashboardInfoRepository .findByTenantIdAndCustomerId( - pageLink.getLimit(), tenantId, customerId, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java index 8102553fd5..771ab6982d 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/DeviceRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.device; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -32,47 +33,47 @@ import java.util.UUID; public interface DeviceRepository extends CrudRepository { - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + - "AND CUSTOMER_ID = :customerId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndCustomerId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + + "AND d.customerId = :customerId " + + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + + "AND d.id > :idOffset ORDER BY d.id") + List findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId, @Param("customerId") UUID customerId, @Param("searchText") String searchText, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND d.id > :idOffset ORDER BY d.id") + List findByTenantId(@Param("tenantId") UUID tenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + - "AND TYPE = :type " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndType(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + + "AND d.type = :type " + + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND d.id > :idOffset ORDER BY d.id") + List findByTenantIdAndType(@Param("tenantId") UUID tenantId, @Param("type") String type, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + - "AND CUSTOMER_ID = :customerId " + - "AND TYPE = :type " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndCustomerIdAndType(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + + "AND d.customerId = :customerId " + + "AND d.type = :type " + + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND d.id > :idOffset ORDER BY d.id") + List findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId, @Param("customerId") UUID customerId, @Param("type") String type, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(value = "SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d") + @Query("SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d") List findTenantDeviceTypes(); DeviceEntity findByTenantIdAndName(UUID tenantId, String name); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java index 68f4262d7c..d7130401f0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.device; import com.google.common.util.concurrent.ListenableFuture; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.Device; @@ -58,11 +59,10 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao public List findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { return DaoUtil.convertDataList( deviceRepository.findByTenantId( - pageLink.getLimit(), tenantId, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) - ); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override @@ -74,12 +74,11 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao public List findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { return DaoUtil.convertDataList( deviceRepository.findByTenantIdAndCustomerId( - pageLink.getLimit(), tenantId, customerId, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) - ); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override @@ -98,25 +97,23 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao public List findDevicesByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { return DaoUtil.convertDataList( deviceRepository.findByTenantIdAndType( - pageLink.getLimit(), tenantId, type, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) - ); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override public List findDevicesByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { return DaoUtil.convertDataList( deviceRepository.findByTenantIdAndCustomerIdAndType( - pageLink.getLimit(), tenantId, customerId, type, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) - ); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java index 109ea553fb..b824ebd895 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.plugin; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.PluginId; @@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -96,10 +98,10 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao entities = pluginMetaDataRepository .findByTenantIdAndPageLink( - pageLink.getLimit(), tenantId.getId(), - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit())); if (log.isTraceEnabled()) { log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); } else { @@ -113,11 +115,11 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao entities = pluginMetaDataRepository .findAllTenantPluginsByTenantId( - pageLink.getLimit(), tenantId, NULL_UUID, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit())); if (log.isTraceEnabled()) { log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); } else { diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java index e05fe81579..7fc454ada0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.plugin; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -32,20 +33,20 @@ public interface PluginMetaDataRepository extends CrudRepository :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndPageLink(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId = :tenantId " + + "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND pmd.id > :idOffset ORDER BY pmd.id") + List findByTenantIdAndPageLink(@Param("tenantId") UUID tenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID IN (:tenantId, :nullTenantId) " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findAllTenantPluginsByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId IN (:tenantId, :nullTenantId) " + + "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND pmd.id > :idOffset ORDER BY pmd.id") + List findAllTenantPluginsByTenantId(@Param("tenantId") UUID tenantId, @Param("nullTenantId") UUID nullTenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java index 1ad16e2cb6..b21b20de1b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.rule; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.RuleId; @@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -73,10 +75,10 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao entities = ruleMetaDataRepository .findByTenantIdAndPageLink( - pageLink.getLimit(), tenantId.getId(), - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit())); if (log.isTraceEnabled()) { log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); } else { @@ -91,11 +93,11 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao entities = ruleMetaDataRepository .findAllTenantRulesByTenantId( - pageLink.getLimit(), tenantId, NULL_UUID, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit())); if (log.isTraceEnabled()) { log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java index 9336e6965a..694a364fed 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.rule; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -32,20 +33,20 @@ public interface RuleMetaDataRepository extends CrudRepository findByPluginToken(String pluginToken); - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID = :tenantId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByTenantIdAndPageLink(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId = :tenantId " + + "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND rmd.id > :idOffset ORDER BY rmd.id") + List findByTenantIdAndPageLink(@Param("tenantId") UUID tenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findAllTenantRulesByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId IN (:tenantId, :nullTenantId) " + + "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND rmd.id > :idOffset ORDER BY rmd.id") + List findAllTenantRulesByTenantId(@Param("tenantId") UUID tenantId, @Param("nullTenantId") UUID nullTenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java index ddd6f7d430..4384362dbb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDao.java @@ -16,6 +16,7 @@ package org.thingsboard.server.dao.sql.tenant; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.Tenant; @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import org.thingsboard.server.dao.tenant.TenantDao; import java.util.List; +import java.util.Objects; import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -55,9 +57,9 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao public List findTenantsByRegion(String region, TextPageLink pageLink) { return DaoUtil.convertDataList(tenantRepository .findByRegionNextPage( - pageLink.getLimit(), region, - pageLink.getTextSearch(), - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); + Objects.toString(pageLink.getTextSearch(), ""), + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), + new PageRequest(0, pageLink.getLimit()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java index 10f58b3158..ffb28e0369 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantRepository.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.sql.tenant; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -30,11 +31,11 @@ import java.util.UUID; @SqlDao public interface TenantRepository extends CrudRepository { - @Query(nativeQuery = true, value = "SELECT * FROM TENANT WHERE REGION = :region " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findByRegionNextPage(@Param("limit") int limit, - @Param("region") String region, + @Query("SELECT t FROM TenantEntity t WHERE t.region = :region " + + "AND LOWER(t.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND t.id > :idOffset ORDER BY t.id") + List findByRegionNextPage(@Param("region") String region, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java index 7df7605ca0..bc056e1c64 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java @@ -15,12 +15,15 @@ */ package org.thingsboard.server.dao.sql.timeseries; +import com.google.common.base.Function; import com.google.common.collect.Lists; +import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.kv.Aggregation; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.kv.TsKvQuery; import org.thingsboard.server.dao.DaoUtil; @@ -31,7 +34,9 @@ import org.thingsboard.server.dao.model.sql.TsKvLatestEntity; import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService; import org.thingsboard.server.dao.timeseries.TimeseriesDao; +import javax.annotation.Nullable; import java.util.List; +import java.util.stream.Collectors; @Component @Slf4j @@ -46,12 +51,34 @@ public class JpaTimeseriesDao extends JpaAbstractDaoListeningExecutorService imp @Override public ListenableFuture> findAllAsync(EntityId entityId, List queries) { - // TODO - Add implementation - return service.submit(() -> null); + List>> futures = queries + .stream() + .map(query -> findAllAsync(entityId, query)) + .collect(Collectors.toList()); + return Futures.transform(Futures.allAsList(futures), new Function>, List>() { + @Nullable + @Override + public List apply(@Nullable List> results) { + if (results == null || results.isEmpty()) { + return null; + } + return results.stream() + .flatMap(List::stream) + .collect(Collectors.toList()); + } + }, service); } private ListenableFuture> findAllAsync(EntityId entityId, TsKvQuery query) { - return null; + if (query.getAggregation() == Aggregation.NONE) { + return findAllAsyncWithLimit(entityId, query); + } else { + return service.submit(() -> null); + } + } + + private ListenableFuture> findAllAsyncWithLimit(EntityId entityId, TsKvQuery query) { + return service.submit(() -> null); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java index d4308cf7b3..64ea0b4102 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java @@ -16,6 +16,7 @@ package org.thingsboard.server.dao.sql.user; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.User; @@ -24,11 +25,11 @@ import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.dao.DaoUtil; import org.thingsboard.server.dao.annotation.SqlDao; import org.thingsboard.server.dao.model.sql.UserEntity; -import org.thingsboard.server.dao.sql.JpaAbstractDao; import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import org.thingsboard.server.dao.user.UserDao; import java.util.List; +import java.util.Objects; import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -66,9 +67,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao imple tenantId, NULL_UUID, pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), - pageLink.getTextSearch(), - Authority.TENANT_ADMIN.name(), - pageLink.getLimit())); + Objects.toString(pageLink.getTextSearch(), ""), + Authority.TENANT_ADMIN, + new PageRequest(0, pageLink.getLimit()))); } @Override @@ -79,9 +80,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao imple tenantId, customerId, pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), - pageLink.getTextSearch(), - Authority.CUSTOMER_USER.name(), - pageLink.getLimit())); + Objects.toString(pageLink.getTextSearch(), ""), + Authority.CUSTOMER_USER, + new PageRequest(0, pageLink.getLimit()))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java index 128f45f4c5..ebeb612f8c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/user/UserRepository.java @@ -15,9 +15,11 @@ */ package org.thingsboard.server.dao.sql.user; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; +import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.dao.annotation.SqlDao; import org.thingsboard.server.dao.model.sql.UserEntity; @@ -32,15 +34,15 @@ public interface UserRepository extends CrudRepository { UserEntity findByEmail(String email); - @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = :tenantId " + - "AND CUSTOMER_ID = :customerId AND AUTHORITY = :authority " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%'))" + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") + @Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " + + "AND u.customerId = :customerId AND u.authority = :authority " + + "AND LOWER(u.searchText) LIKE LOWER(CONCAT(:searchText, '%'))" + + "AND u.id > :idOffset ORDER BY u.id") List findUsersByAuthority(@Param("tenantId") UUID tenantId, @Param("customerId") UUID customerId, @Param("idOffset") UUID idOffset, @Param("searchText") String searchText, - @Param("authority") String authority, - @Param("limit") int limit); + @Param("authority") Authority authority, + Pageable pageable); } \ No newline at end of file diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java index a3c06f1fb7..0e7c0f82b1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java @@ -16,6 +16,7 @@ package org.thingsboard.server.dao.sql.widget; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.page.TextPageLink; @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; import org.thingsboard.server.dao.widget.WidgetsBundleDao; import java.util.List; +import java.util.Objects; import java.util.UUID; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -61,10 +63,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao :idOffset ORDER BY ID LIMIT :limit") - List findSystemWidgetsBundles(@Param("limit") int limit, - @Param("systemTenantId") UUID systemTenantId, + @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId = :systemTenantId " + + "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + + "AND wb.id > :idOffset ORDER BY wb.id") + List findSystemWidgetsBundles(@Param("systemTenantId") UUID systemTenantId, @Param("searchText") String searchText, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :tenantId " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findTenantWidgetsBundlesByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId = :tenantId " + + "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND wb.id > :idOffset ORDER BY wb.id") + List findTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " + - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + - "AND ID > :idOffset ORDER BY ID LIMIT :limit") - List findAllTenantWidgetsBundlesByTenantId(@Param("limit") int limit, - @Param("tenantId") UUID tenantId, + @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId IN (:tenantId, :nullTenantId) " + + "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + + "AND wb.id > :idOffset ORDER BY wb.id") + List findAllTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId, @Param("nullTenantId") UUID nullTenantId, @Param("textSearch") String textSearch, - @Param("idOffset") UUID idOffset); + @Param("idOffset") UUID idOffset, + Pageable pageable); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java index ad0c9cf602..265185479b 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDaoTest.java @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.alarm; import com.google.common.util.concurrent.ListenableFuture; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmId; @@ -59,7 +60,7 @@ public class JpaAlarmDaoTest extends AbstractJpaDaoTest { saveAlarm(alarm3Id, tenantId, originator2Id, "TEST_ALARM"); assertEquals(3, alarmDao.find().size()); AlarmEntity alarmEntity = alarmRepository.findLatestByOriginatorAndType( - tenantId, originator1Id, EntityType.DEVICE.ordinal(), "TEST_ALARM"); + tenantId, originator1Id, EntityType.DEVICE, "TEST_ALARM", new PageRequest(0, 1)).get(0); assertNotNull(alarmEntity); ListenableFuture future = alarmDao .findLatestByOriginatorAndType(new TenantId(tenantId), new DeviceId(originator1Id), "TEST_ALARM"); diff --git a/dao/src/test/resources/jpa-test.properties b/dao/src/test/resources/jpa-test.properties index 58ca25f1c2..80ae6ffc29 100644 --- a/dao/src/test/resources/jpa-test.properties +++ b/dao/src/test/resources/jpa-test.properties @@ -7,4 +7,8 @@ spring.jpa.hibernate.ddl-auto=validate spring.datasource.url=jdbc:postgresql://localhost:5432/thingsboard spring.datasource.username=postgres -spring.datasource.password=postgres \ No newline at end of file +spring.datasource.password=postgres + +#spring.datasource.url=jdbc:h2:mem:test;MODE=PostgreSQL +#spring.datasource.schema=classpath:postgres/schema.sql +#spring.datasource.data=classpath:postgres/system-data.sql;classpath:system-test.sql \ No newline at end of file