diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 88f2527..feda9b0 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -13,7 +13,8 @@
-
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e8942bd..273b71e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -7,7 +7,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index d6ff43e..c7f9e39 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/cl_query_data_job/pom.xml b/cl_query_data_job/pom.xml
index 1fa826d..0e37dbd 100644
--- a/cl_query_data_job/pom.xml
+++ b/cl_query_data_job/pom.xml
@@ -4,9 +4,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- cl_stream_3.1.1
+ cl_stream_3.1.2
com.bfd.mf
- 3.1.1-SNAPSHOT
+ 3.1.2-SNAPSHOT
cl_query_data_job
diff --git a/cl_query_data_job/src/main/java/com/bfd/mf/job/config/ESConstants.java b/cl_query_data_job/src/main/java/com/bfd/mf/job/config/ESConstants.java
index ea623fc..d7bb47e 100644
--- a/cl_query_data_job/src/main/java/com/bfd/mf/job/config/ESConstants.java
+++ b/cl_query_data_job/src/main/java/com/bfd/mf/job/config/ESConstants.java
@@ -724,6 +724,8 @@ public class ESConstants {
public static final String DATA_COUNT = "dataCount";
+ public static final String PAGETYPR = "pageType";
+
/**
* 回溯开始时间
*/
@@ -964,6 +966,13 @@ public class ESConstants {
public static final String OTHER = "other";
public static final String LIFE = "life";
+ public static final String TOTALCOUNT = "totalCount";
+ public static final String TODAYCOUNT = "todayCount";
+ public static final String IMAGECOUNT = "imageCount";
+ public static final String VIDEOCOUNT = "videoCount";
+ public static final String FILECOUNT = "fileCount";
+ public static final String TEXTCOUNT = "textCount";
+
/**
* 微博信息 added by Eric 2016-10-28 15:03:31
diff --git a/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/entity/Alarm.java b/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/entity/Alarm.java
new file mode 100644
index 0000000..5a6d884
--- /dev/null
+++ b/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/entity/Alarm.java
@@ -0,0 +1,153 @@
+package com.bfd.mf.job.domain.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "cl_alarm")
+public class Alarm extends AbstractEntity {
+ private int alarmTag;
+ private int alarmReason;
+ private String alarmMessage;
+ private String alarmTaskUrl;
+ private String alarmTaskContent;
+ private String alarmCid;
+ private String alarmConfig;
+ private String alarmTriggerTime;
+ private String alarmAssignTime;
+ private String alarmFinishTime;
+ private String alarmHandler;
+ private String opinion;
+ private int status;
+ private String createTime;
+ private String updateTime;
+ private int del;
+
+ public int getAlarmTag() {
+ return alarmTag;
+ }
+
+ public void setAlarmTag(int alarmTag) {
+ this.alarmTag = alarmTag;
+ }
+
+ public int getAlarmReason() {
+ return alarmReason;
+ }
+
+ public void setAlarmReason(int alarmReason) {
+ this.alarmReason = alarmReason;
+ }
+
+ public String getAlarmMessage() {
+ return alarmMessage;
+ }
+
+ public void setAlarmMessage(String alarmMessage) {
+ this.alarmMessage = alarmMessage;
+ }
+
+ public String getAlarmTaskUrl() {
+ return alarmTaskUrl;
+ }
+
+ public void setAlarmTaskUrl(String alarmTaskUrl) {
+ this.alarmTaskUrl = alarmTaskUrl;
+ }
+
+ public String getAlarmTaskContent() {
+ return alarmTaskContent;
+ }
+
+ public void setAlarmTaskContent(String alarmTaskContent) {
+ this.alarmTaskContent = alarmTaskContent;
+ }
+
+ public String getAlarmCid() {
+ return alarmCid;
+ }
+
+ public void setAlarmCid(String alarmCid) {
+ this.alarmCid = alarmCid;
+ }
+
+ public String getAlarmConfig() {
+ return alarmConfig;
+ }
+
+ public void setAlarmConfig(String alarmConfig) {
+ this.alarmConfig = alarmConfig;
+ }
+
+ public String getAlarmTriggerTime() {
+ return alarmTriggerTime;
+ }
+
+ public void setAlarmTriggerTime(String alarmTriggerTime) {
+ this.alarmTriggerTime = alarmTriggerTime;
+ }
+
+ public String getAlarmAssignTime() {
+ return alarmAssignTime;
+ }
+
+ public void setAlarmAssignTime(String alarmAssignTime) {
+ this.alarmAssignTime = alarmAssignTime;
+ }
+
+ public String getAlarmFinishTime() {
+ return alarmFinishTime;
+ }
+
+ public void setAlarmFinishTime(String alarmFinishTime) {
+ this.alarmFinishTime = alarmFinishTime;
+ }
+
+ public String getAlarmHandler() {
+ return alarmHandler;
+ }
+
+ public void setAlarmHandler(String alarmHandler) {
+ this.alarmHandler = alarmHandler;
+ }
+
+ public String getOpinion() {
+ return opinion;
+ }
+
+ public void setOpinion(String opinion) {
+ this.opinion = opinion;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(String updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public int getDel() {
+ return del;
+ }
+
+ public void setDel(int del) {
+ this.del = del;
+ }
+}
diff --git a/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/AlarmRepository.java b/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/AlarmRepository.java
new file mode 100644
index 0000000..75b2190
--- /dev/null
+++ b/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/AlarmRepository.java
@@ -0,0 +1,9 @@
+package com.bfd.mf.job.domain.repository;
+
+import com.bfd.mf.job.domain.entity.Alarm;
+import org.springframework.data.repository.CrudRepository;
+
+public interface AlarmRepository extends CrudRepository {
+
+
+}
diff --git a/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/TaskRepository.java b/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/TaskRepository.java
index 6fd0539..f1dfb86 100644
--- a/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/TaskRepository.java
+++ b/cl_query_data_job/src/main/java/com/bfd/mf/job/domain/repository/TaskRepository.java
@@ -12,34 +12,18 @@ import java.util.Map;
public interface TaskRepository extends CrudRepository {
-// @Query(value = "SELECT id,subject_id,external_id,site_type,task_type,cid,crawl_data_flag,cache_num,crawl_start_time,crawl_end_time,data_total,today_data_total,update_time FROM cl_task WHERE NOW() > SUBDATE(update_time,interval -15 minute) AND del = 0 AND subject_id in (SELECT id from cl_subject WHERE `status` = 0 AND del =0)", nativeQuery = true)
-// List findAllTask();
-
- @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del,file_name,file_remark,crawl_content_key FROM cl_task WHERE task_type <> 3 AND crawl_status = 1 AND cache_num = 0 AND data_total = 0 AND del = 0 AND subject_id in (SELECT id from cl_subject WHERE del =0) ORDER BY id DESC ",nativeQuery = true)
+ @Query(value = "SELECT ct.id,ct.app_id,ct.subject_id,ct.external_id,cs.site_type,ct.task_type,ct.cid,ct.crawl_status,ct.crawl_start_time,ct.crawl_end_time,ct.crawl_data_flag,ct.data_total,ct.today_data_total,ct.cache_num,ct.update_time,ct.del,ct.crawl_content_key FROM cl_task ct JOIN intelligent_crawl.cl_site cs ON ct.cid = cs.cid WHERE ct.task_type <> 3 AND ct.crawl_status = 1 AND ct.cache_num = 0 AND ct.data_total = 0 AND ct.del = 0 AND ct.subject_id in (SELECT id from cl_subject csu WHERE csu.del =0) ORDER BY ct.id DESC;",nativeQuery = true)
List findAllNewTask();
- // 统计服务查询 要统计的任务,之前由于所有任务都要半小时统计,任务太多会把E搞挂,就只统计 update_time 近一天的吧!
-// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del,file_name,file_remark FROM cl_task WHERE del = 0 AND crawl_status <> 3",nativeQuery = true) // AND crawl_status <> 3
- // 每天只统计两种情况的任务
- //1、当天完成的任务:crawl_status=3 and end_time > 前天
- //2、状态为采集中或者 暂停的任务 crawl_status=0 or crawl_tatus=1
- // 其他的任务就不用每天都统计了!!
- @Query(value = " SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del,file_name,file_remark,crawl_content_key FROM `cl_task` WHERE del = 0 AND ((crawl_status = 1 OR crawl_status = 0) OR (crawl_status = 3 AND end_time > date_sub(curdate(),interval 2 day))) ;",nativeQuery = true)
+ // 需要统计的任务的查询条件 1、 状态为 1 OR 0;2、状态为3,且任务完成时间再2天前的。
+ @Query(value = "SELECT ct.id,ct.app_id,ct.subject_id,ct.external_id,cs.site_type, ct.task_type,ct.cid,ct.crawl_status,ct.crawl_start_time,ct.crawl_end_time,ct.crawl_data_flag,ct.data_total,ct.today_data_total,ct.cache_num,ct.update_time,ct.del,ct.crawl_content_key FROM `cl_task` ct JOIN intelligent_crawl.cl_site cs ON ct.cid = cs.cid WHERE ct.del = 0 AND ((ct.crawl_status = 1 OR ct.crawl_status = 0) OR (ct.crawl_status = 3 AND ct.end_time > date_sub(curdate(),interval 2 day))); ",nativeQuery = true)
+ // @Query(value = "SELECT ct.id,ct.app_id,ct.subject_id,ct.external_id,cs.site_type, ct.task_type,ct.cid,ct.crawl_status,ct.crawl_start_time,ct.crawl_end_time,ct.crawl_data_flag,ct.data_total,ct.today_data_total,ct.cache_num,ct.update_time,ct.del,ct.crawl_content_key FROM `cl_task` ct JOIN intelligent_crawl.cl_site cs ON ct.cid = cs.cid WHERE ct.del = 0 AND ct.subject_id = 12273 ; ",nativeQuery = true)
List findAllBydel0();
-//
-// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del FROM cl_task WHERE cache_num = 0 AND data_total = 0 AND del = 0 AND subject_id in (SELECT id from cl_subject WHERE del =0) ORDER BY id DESC ",nativeQuery = true)
-// List findAllNewTask();
-//
-// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del FROM cl_task WHERE del=0 ",nativeQuery = true)
-// List findAllBydel0();
-
-// @Query(value = "SELECT id,subject_id,external_id,site_type,task_type,cid,crawl_data_flag,cache_num,crawl_start_time,crawl_end_time,data_total,today_data_total,update_time FROM cl_task WHERE del=0 AND subject_id=?1",nativeQuery = true)
-// List findTasksBySbujectIdAndDel0(BigInteger subjectId);
- @Query(value = " SELECT SUM(data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND site_type=?2 ",nativeQuery = true)
+ @Query(value = "SELECT sum(data_total) FROM cl_task ct JOIN intelligent_crawl.cl_site cs ON ct.cid=cs.cid WHERE ct.del =0 AND ct.subject_id = ?1 AND cs.site_type = ?2",nativeQuery = true)
Long findDataTotalBySbujectIdAndSiteType(BigInteger subjectId,int siteType);
- @Query(value = " SELECT SUM(today_data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND site_type=?2 ",nativeQuery = true)
+ @Query(value = "SELECT sum(today_data_total) FROM cl_task ct JOIN intelligent_crawl.cl_site cs ON ct.cid=cs.cid WHERE ct.del =0 AND ct.subject_id = ?1 AND cs.site_type = ?2 ",nativeQuery = true)
Long findTodayDataTotalBySbujectIdAndSiteType(BigInteger subjectId,int siteType);
@Query(value = " SELECT SUM(data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2 ",nativeQuery = true)
@@ -52,17 +36,6 @@ public interface TaskRepository extends CrudRepository {
@Query(value = " SELECT SUM(data_total) FROM cl_task WHERE end_time >?1 AND end_time 2 AND crawl_status = 3 AND task_type <>3 ",nativeQuery = true)
Long findTodayDataTotal(String taskStartTime ,String taskEndTime);
-// @Query(value = " SELECT count(*) FROM cl_task WHERE today_data_total > 0 AND task_level < 2 AND crawl_status = 3 ",nativeQuery = true)
-// Long findTodayDataTotalTaskNum();
-// @Query(value = "SELECT id,subject_id,task_type,crawl_status,file_name,del from cl_task WHERE del = 0 AND task_type = 3 AND crawl_status=1 ",nativeQuery = true)
-// List getTaskNeedUpLoad();
-// @Query(value = " SELECT SUM(data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2",nativeQuery = true)
-// Long findDataTotalBySbujectIdAndTaskType(BigInteger subjectId,int taskType);
-// @Query(value = " SELECT SUM(today_data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2",nativeQuery = true)
-// Long findTodayDataTotalBySbujectIdAndTaskType(BigInteger subjectId,int taskType);
-
-
-
/**
* 更新每个任务 拉数据次数
*/
@@ -104,7 +77,108 @@ public interface TaskRepository extends CrudRepository {
@Query(value = "SELECT TIMESTAMPDIFF(MINUTE, start_time,end_time) FROM cl_task WHERE del = 0 AND task_type <>3 AND crawl_status = 3 AND data_total > 0 AND end_time > ?1 AND end_time < ?2 ",nativeQuery = true)
List findTaskByCrawlTime(String taskStartTime, String taskEndTime);
+ // @Query(value = "SELECT ct.id,ct.subject_id,ct.external_id,cs.site_type, ct.task_type,ct.cid,ct.crawl_status,ct.crawl_start_time,ct.crawl_end_time,ct.crawl_data_flag,ct.data_total,ct.today_data_total,ct.cache_num,ct.update_time,ct.del,ct.file_name,ct.file_remark,ct.crawl_content_key FROM `cl_task` ct JOIN intelligent_crawl.cl_site cs ON ct.cid = cs.cid WHERE ct.del = 0 AND ct.id = ?1",nativeQuery = true)
+
+ @Query(value = "SELECT ct.id,ct.app_id,ct.subject_id,ct.external_id,cs.site_type, ct.task_type,ct.cid,ct.crawl_status,ct.crawl_start_time,ct.crawl_end_time,ct.crawl_data_flag,ct.data_total,ct.today_data_total,ct.cache_num,ct.update_time,ct.del,ct.crawl_content_key FROM `cl_task` ct JOIN intelligent_crawl.cl_site cs ON ct.cid = cs.cid WHERE ct.del = 0 AND ct.id = ?1 ;",nativeQuery = true)
+ List findOneTaskByIdAndAppId(long taskId);
+
+
+
+
+
+// @Query(value = "SELECT id,subject_id,external_id,site_type,task_type,cid,crawl_data_flag,cache_num,crawl_start_time,crawl_end_time,data_total,today_data_total,update_time FROM cl_task WHERE NOW() > SUBDATE(update_time,interval -15 minute) AND del = 0 AND subject_id in (SELECT id from cl_subject WHERE `status` = 0 AND del =0)", nativeQuery = true)
+// List findAllTask();
+
+// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del,file_name,file_remark,crawl_content_key FROM cl_task WHERE task_type <> 3 AND crawl_status = 1 AND cache_num = 0 AND data_total = 0 AND del = 0 AND subject_id in (SELECT id from cl_subject WHERE del =0) ORDER BY id DESC ",nativeQuery = true)
+// List findAllNewTask();
+//
+// // 统计服务查询 要统计的任务,之前由于所有任务都要半小时统计,任务太多会把E搞挂,就只统计 update_time 近一天的吧!
+//// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del,file_name,file_remark FROM cl_task WHERE del = 0 AND crawl_status <> 3",nativeQuery = true) // AND crawl_status <> 3
+// // 每天只统计两种情况的任务
+// //1、当天完成的任务:crawl_status=3 and end_time > 前天
+// //2、状态为采集中或者 暂停的任务 crawl_status=0 or crawl_tatus=1
+// // 其他的任务就不用每天都统计了!!
+// @Query(value = " SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del,file_name,file_remark,crawl_content_key FROM `cl_task` WHERE del = 0 AND subject_id = 12273 AND ((crawl_status = 1 OR crawl_status = 0) OR (crawl_status = 3 AND end_time > date_sub(curdate(),interval 2 day))) ;",nativeQuery = true)
+// List findAllBydel0();
+////
+//// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del FROM cl_task WHERE cache_num = 0 AND data_total = 0 AND del = 0 AND subject_id in (SELECT id from cl_subject WHERE del =0) ORDER BY id DESC ",nativeQuery = true)
+//// List findAllNewTask();
+////
+//// @Query(value = "SELECT id,subject_id,external_id,site_type, task_type,cid,crawl_status,crawl_start_time,crawl_end_time,crawl_data_flag,data_total,today_data_total,cache_num,update_time,del FROM cl_task WHERE del=0 ",nativeQuery = true)
+//// List findAllBydel0();
+//
+//// @Query(value = "SELECT id,subject_id,external_id,site_type,task_type,cid,crawl_data_flag,cache_num,crawl_start_time,crawl_end_time,data_total,today_data_total,update_time FROM cl_task WHERE del=0 AND subject_id=?1",nativeQuery = true)
+//// List findTasksBySbujectIdAndDel0(BigInteger subjectId);
+//
+// @Query(value = " SELECT SUM(data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND site_type=?2 ",nativeQuery = true)
+// Long findDataTotalBySbujectIdAndSiteType(BigInteger subjectId,int siteType);
+//
+// @Query(value = " SELECT SUM(today_data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND site_type=?2 ",nativeQuery = true)
+// Long findTodayDataTotalBySbujectIdAndSiteType(BigInteger subjectId,int siteType);
+//
+// @Query(value = " SELECT SUM(data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2 ",nativeQuery = true)
+// Long findDataTotalBySbujectIdAndTaskType(BigInteger subjectId,int taskType);
+//
+// @Query(value = " SELECT SUM(today_data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2 ",nativeQuery = true)
+// Long findTodayDataTotalBySbujectIdAndTaskType(BigInteger subjectId,int taskType);
+//
+// // 统计任务的抓取量! 任务质量 任务状态为“已完成” 的 今天入库的总数据量 / 总任务数
+// @Query(value = " SELECT SUM(data_total) FROM cl_task WHERE end_time >?1 AND end_time 2 AND crawl_status = 3 AND task_type <>3 ",nativeQuery = true)
+// Long findTodayDataTotal(String taskStartTime ,String taskEndTime);
+//
+//// @Query(value = " SELECT count(*) FROM cl_task WHERE today_data_total > 0 AND task_level < 2 AND crawl_status = 3 ",nativeQuery = true)
+//// Long findTodayDataTotalTaskNum();
+//// @Query(value = "SELECT id,subject_id,task_type,crawl_status,file_name,del from cl_task WHERE del = 0 AND task_type = 3 AND crawl_status=1 ",nativeQuery = true)
+//// List getTaskNeedUpLoad();
+//// @Query(value = " SELECT SUM(data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2",nativeQuery = true)
+//// Long findDataTotalBySbujectIdAndTaskType(BigInteger subjectId,int taskType);
+//// @Query(value = " SELECT SUM(today_data_total) FROM cl_task WHERE del=0 AND subject_id=?1 AND task_type=?2",nativeQuery = true)
+//// Long findTodayDataTotalBySbujectIdAndTaskType(BigInteger subjectId,int taskType);
+//
+//
+//
+// /**
+// * 更新每个任务 拉数据次数
+// */
+// @Modifying
+// @Transactional(rollbackFor = Exception.class)
+// @Query(value = "update cl_task set cache_num=?1 where id=?2", nativeQuery = true)
+// Integer updateStatus(int cache_num,long id);
+//
+// /**
+// * 乐观锁
+// */
+// @Modifying
+// @Transactional(rollbackFor = Exception.class)
+// @Query(value = "update cl_task set cache_num=?1 where id=?2 and cache_num=?3", nativeQuery = true)
+// Integer tryLock(Integer newStatus, long id, Integer oldStatus);
+//
+// /**
+// * 修改每个任务的统计结果
+// */
+// @Modifying
+// @Transactional(rollbackFor = Exception.class)
+// @Query(value = "update cl_task set data_total =?2 , today_data_total =?3 where id =?1 ", nativeQuery = true)
+// void updateTaskCount(Long id, Long totalCount, Long todayCount);
+//
+// @Modifying
+// @Transactional(rollbackFor = Exception.class)
+// @Query(value = "update cl_task set crawl_status =?4 where id =?1 ", nativeQuery = true)
+// void updateCrawlStatus(long taskId);
+//
+// @Query(value = " SELECT id,start_time,end_time FROM cl_task WHERE del=0 AND crawl_status = 3 AND start_time >?1 AND end_time 2 ",nativeQuery = true)
+// List