java类org.springframework.transaction.annotation.Propagation的实例源码

BookmarkDaoImpl.java 文件源码 项目:Equella 阅读 19 收藏 0 点赞 0 评论 0
@SuppressWarnings("unchecked")
@Override
@Transactional(propagation = Propagation.MANDATORY)
public Map<Item, Bookmark> getBookmarksForItems(Collection<Item> items, String userId)
{
    if( items.isEmpty() )
    {
        return Collections.emptyMap();
    }

    final List<Bookmark> bs = getHibernateTemplate().findByNamedParam(
        "FROM Bookmark b WHERE b.item IN (:items) and b.owner = :ownerId", new String[]{"items", "ownerId"},
        new Object[]{items, userId});

    final Map<Item, Bookmark> rv = new HashMap<Item, Bookmark>();
    for( Bookmark b : bs )
    {
        rv.put(b.getItem(), b);
    }
    return rv;
}
AbstractEntityServiceImpl.java 文件源码 项目:Equella 阅读 31 收藏 0 点赞 0 评论 0
/**
 * For REST calls or anything not using some sort of "session"
 * 
 * @param entity
 */
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void save(T entity, @Nullable TargetList targetList, @Nullable Map<Object, TargetList> otherTargetLists,
    @Nullable String stagingUuid, @Nullable String lockId, boolean keepLocked) throws LockedException
{
    if( entity.getId() == 0 )
    {
        final EntityPack<T> pack = new EntityPack<T>(entity, stagingUuid);
        pack.setTargetList(targetList);
        pack.setOtherTargetLists(otherTargetLists);
        doAdd(pack, null, keepLocked);
    }
    else
    {
        doStopEditWithLock(entity, targetList, otherTargetLists, stagingUuid, lockId, !keepLocked);
    }
}
UserRelationController.java 文件源码 项目:OMIPlatform 阅读 18 收藏 0 点赞 0 评论 0
@RequestMapping("/modifyRelation")
@Transactional(propagation = Propagation.REQUIRED)
public Message modifyRelation(@RequestBody List<UserRelation> relations) {
    Message message = new Message();
    if (relations != null && relations.size() > 0) {
        try {
            for (int i = 0; i < relations.size(); i++) {
                if (relations.get(i).getUrid() != null) {
                    this.userRelationService.update(relations.get(i));
                } else {

                    this.userRelationService.insert(relations.get(i));
                }
            }
        } catch (Exception excption) {
            excption.printStackTrace();
            return message;
        }
    }
    message.setStatus(1);
    return message;
}
SystemService.java 文件源码 项目:dhus-core 阅读 27 收藏 0 点赞 0 评论 0
@PreAuthorize ("hasRole('ROLE_SYSTEM_MANAGER')")
@Transactional (readOnly=false, propagation=Propagation.REQUIRED)
public Configuration saveSystemSettings (Configuration cfg) throws
      IllegalArgumentException, IllegalAccessException,
      InvocationTargetException, CloneNotSupportedException
{
   Configuration db_cfg = cfgDao.getCurrentConfiguration ();
   cfg = cfg.completeWith (db_cfg);
   db_cfg.setCronConfiguration (cfg.getCronConfiguration ());
   db_cfg.setGuiConfiguration (cfg.getGuiConfiguration ());
   db_cfg.setMessagingConfiguration (cfg.getMessagingConfiguration ());
   db_cfg.setNetworkConfiguration (cfg.getNetworkConfiguration ());
   db_cfg.setProductConfiguration (cfg.getProductConfiguration ());
   db_cfg.setSearchConfiguration (cfg.getSearchConfiguration ());
   db_cfg.setServerConfiguration (cfg.getServerConfiguration ());
   db_cfg.setSystemConfiguration (cfg.getSystemConfiguration ());
   cfgDao.update (db_cfg);
   return cfgDao.getCurrentConfiguration ();
}
DaoHelper.java 文件源码 项目:NGB-master 阅读 24 收藏 0 点赞 0 评论 0
@Transactional(propagation = Propagation.MANDATORY)
public Long createTempList(final Long listId, final Collection<? extends BaseEntity> list) {
    Assert.notNull(listId);
    Assert.isTrue(CollectionUtils.isNotEmpty(list));
    // creates a new local temporary table if it doesn't exists to handle temporary lists
    getJdbcTemplate().update(createTemporaryListQuery);
    // fills in a temporary list by given values
    int i = 0;
    final Iterator<? extends BaseEntity> iterator = list.iterator();
    final MapSqlParameterSource[] batchArgs = new MapSqlParameterSource[list.size()];
    while (iterator.hasNext()) {
        MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue(HelperParameters.LIST_ID.name(), listId);
        params.addValue(HelperParameters.LIST_VALUE.name(), iterator.next().getId());
        batchArgs[i] = params;
        i++;
    }
    getNamedParameterJdbcTemplate().batchUpdate(insertTemporaryListItemQuery, batchArgs);
    return listId;
}
UserService.java 文件源码 项目:dhus-core 阅读 28 收藏 0 点赞 0 评论 0
@Transactional (readOnly=false, propagation=Propagation.REQUIRED)
@Caching (evict = {
   @CacheEvict(value = "user", allEntries = true),
   @CacheEvict(value = "userByName", allEntries = true)})
public void resetPassword(String code, String new_password)
   throws RootNotModifiableException, RequiredFieldMissingException, 
      EmailNotSentException
{
   User u = userDao.getUserFromUserCode (code);
   if (u == null)
   {
      throw new UserNotExistingException ();
   }
   checkRoot (u);

   u.setPassword (new_password);

   checkRequiredFields (u);
   userDao.update (u);
}
VcfFileDao.java 文件源码 项目:NGB-master 阅读 20 收藏 0 点赞 0 评论 0
/**
 * Load sample metadata from the database for all files, corresponding the given reference ID.
 *
 * @param vcfFileId {@code long} reference ID for which files samples were saved.
 * @return {@code Map&lt;Long, List&lt;Sample&gt;&gt;} with file IDs for giver reference ID as keys, and with
 * lists of samples, corresponding this file IDs as values.
 */
@Transactional(propagation = Propagation.MANDATORY)
public Map<Long, List<VcfSample>> loadSamplesForFilesByReference(long vcfFileId) {
    Map<Long, List<VcfSample>> sampleFileMap = new HashMap<>();

    getJdbcTemplate().query(loadSamplesForFilesByReferenceIdQuery, rs -> {
        Long fileId = rs.getLong(SampleParameters.VCF_ID.name());
        if (!sampleFileMap.containsKey(fileId)) {
            sampleFileMap.put(fileId, new ArrayList<>());
        }

        VcfSample sample = new VcfSample();

        sample.setId(rs.getLong(SampleParameters.VCF_SAMPLE_ID.name()));
        sample.setName(rs.getString(SampleParameters.SAMPLE_NAME.name()));
        sample.setIndex(rs.getInt(SampleParameters.ORDER_INDEX.name()));

        sampleFileMap.get(fileId).add(sample);
    }, vcfFileId);

    return sampleFileMap;
}
AclDaoImpl.java 文件源码 项目:Equella 阅读 21 收藏 0 点赞 0 评论 0
@Override
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.MANDATORY)
public List<ACLEntryMapping> getAllEntries(final Collection<String> privileges, Collection<String> targets)
{
    return getHibernateTemplate().executeFind(new CollectionPartitioner<String, ACLEntryMapping>(targets)
    {
        @Override
        public List<ACLEntryMapping> doQuery(Session session, Collection<String> collection)
        {
            Query query = session.getNamedQuery("getAllEntries");
            query.setParameter("institution", CurrentInstitution.get());
            query.setParameterList("targets", collection);
            query.setParameterList("privileges", privileges);
            return query.list();
        }
    });
}
ToolsControllerTest.java 文件源码 项目:NGB-master 阅读 25 收藏 0 点赞 0 评论 0
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void specifiedSortedFileShouldBeCreated() throws Exception {
    File tempDirectory = getTempDirectory();

    File toBeSorted = context.getResource("classpath:templates/" + UNSORTED_BED_NAME).getFile();
    File copiedToBeSorted = new File(tempDirectory, UNSORTED_BED_NAME);
    Files.copy(toBeSorted.toPath(), copiedToBeSorted.toPath());

    File sortedPath = new File(tempDirectory, SPECIFIED_BED_NAME);

    FeatureFileSortRequest request = new FeatureFileSortRequest();
    request.setOriginalFilePath(copiedToBeSorted.getAbsolutePath());
    request.setSortedFilePath(sortedPath.getAbsolutePath());

    assertSortRequest(request, new Equals(sortedPath.getAbsolutePath()));
}
BiologicalDataItemDao.java 文件源码 项目:NGB-master 阅读 18 收藏 0 点赞 0 评论 0
/**
 * Loads a List of BiologicalDataItem from the database by their IDs
 * @param ids List of IDs of BiologicalDataItem instances
 * @return List of BiologicalDataItem, matching specified IDs
 */
@Transactional(propagation = Propagation.MANDATORY)
public List<BiologicalDataItem> loadBiologicalDataItemsByIds(List<Long> ids) {
    if (ids == null || ids.isEmpty()) {
        return Collections.emptyList();
    }

    Long listId = daoHelper.createTempLongList(ids);

    final MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue(BiologicalDataItemParameters.BIO_DATA_ITEM_ID.name(), listId);

    List<BiologicalDataItem> items = getNamedParameterJdbcTemplate().query(loadBiologicalDataItemsByIdsQuery,
            params, getRowMapper());

    daoHelper.clearTempList(listId);

    return items;
}
AdminResourceServiceImpl.java 文件源码 项目:xproject 阅读 19 收藏 0 点赞 0 评论 0
@Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRED)
public void updateResource(AdminResource resource) {
    ValidationAssert.notNull(resource, "参数不能为空!");
    ValidationAssert.notNull(resource.getResourceId(), "资源id不能为空!");
    resource.setPermissionExpression(StringUtils.defaultIfEmpty(resource.getPermissionExpression(), null));
    resource.setResourceUrl(StringUtils.defaultIfEmpty(resource.getResourceUrl(), null));
    AdminResource presource = adminResourceMapper.selectThinResourceById(resource.getResourceId(), true);
    ValidationAssert.notNull(presource, "该资源已经不存在了!");
    try {
        adminResourceMapper.updateResource(resource);
    } catch(DuplicateKeyException e) {
        BusinessAssert.isTrue(!e.getCause().getMessage().toUpperCase().contains("RESOURCE_NAME"), "修改资源失败,该资源名称已经存在!");
        BusinessAssert.isTrue(!e.getCause().getMessage().toUpperCase().contains("PERMISSION_EXPRESSION"), "修改资源失败,该权限表达式已经存在!");
        throw e;
    }
}
HierarchyServiceImpl.java 文件源码 项目:Equella 阅读 23 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.REQUIRED)
@SecureOnCall(priv = "MODIFY_KEY_RESOURCE")
public void addKeyResource(HierarchyTreeNode node, ItemKey itemId)
{
    final HierarchyTopic topic = getHierarchyTopic(node.getId());
    final Item item = itemService.get(itemId);

    List<Item> list = topic.getKeyResources();
    if( list == null )
    {
        list = new ArrayList<Item>();
        topic.setKeyResources(list);
    }

    if( !list.contains(item) )
    {
        list.add(item);
    }

    dao.saveOrUpdate(topic);
}
EntityLockingServiceImpl.java 文件源码 项目:Equella 阅读 22 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.MANDATORY)
public EntityLock getLock(BaseEntity entity, String lockId)
{
    EntityLock lock = entityLockDao.findByCriteria(Restrictions.eq("entity", entity));
    if( lock != null )
    {
        if( lockId == null )
        {
            throw new LockedException("Entity is locked by another user '" + lock.getUserID() + "'",
                lock.getUserID(), lock.getUserSession(), entity.getId());
        }
        if( !lockId.equals(lock.getUserSession()) )
        {
            throw new LockedException("Wrong lock id. Entity is locked by user.", lock.getUserID(),
                lock.getUserSession(), entity.getId());
        }
    }
    else if( lockId != null )
    {
        throw new LockedException("Entity is not locked", null, null, entity.getId());
    }
    return lock;
}
NotificationDaoImpl.java 文件源码 项目:Equella 阅读 25 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.MANDATORY)
public int markProcessedById(final String user, final Collection<Long> notifications, final String attemptId)
{
    if( notifications.isEmpty() )
    {
        return 0;
    }
    return (Integer) getHibernateTemplate().execute(new HibernateCallback()
    {
        @Override
        public Object doInHibernate(Session session)
        {
            Query query = session.createQuery("update Notification set processed = true "
                    + "where institution = :inst and userTo = :user and processed = false "
                    + "and id in (:noteid) and attemptId = :attempt");
            query.setParameter(ATTEMPT, attemptId);
            query.setParameterList(NOTEID, notifications);
            query.setParameter(USER, user);
            query.setParameter(INST, CurrentInstitution.get());
            return query.executeUpdate();
        }
    });
}
CollectionService.java 文件源码 项目:dhus-core 阅读 20 收藏 0 点赞 0 评论 0
@PreAuthorize ("hasRole('ROLE_DATA_MANAGER')")
@Transactional (readOnly=false, propagation=Propagation.REQUIRED)
@CacheEvict (value = "products", allEntries = true)
public void removeProducts (String uuid, Long[] pids)
{
   collectionDao.removeProducts (uuid, pids, null);
   long start = new Date ().getTime ();
   for (Long pid: pids)
   {
      try
      {
         searchService.index(productDao.read(pid));
      }
      catch (Exception e)
      {
         throw new RuntimeException("Cannot update Solr index", e);
      }
   }
   long end = new Date ().getTime ();
   LOGGER.info("[SOLR] Remove " + pids.length +
      " product(s) from collection spent " + (end-start) + "ms" );
}
TLEGroupServiceImpl.java 文件源码 项目:Equella 阅读 20 收藏 0 点赞 0 评论 0
@RequiresPrivilege(priv = "EDIT_USER_MANAGEMENT")
@Transactional(propagation = Propagation.REQUIRED)
public void delete(TLEGroup group, boolean deleteChildren)
{
    TLEGroup parent = group.getParent();

    if( !deleteChildren )
    {
        // Move children up to same level as group we're deleting
        for( TLEGroup child : getGroupsInGroup(group) )
        {
            child.setParent(parent);
            updateGroup(child);
            dao.update(child);
        }
    }

    dao.delete(group);
    eventService.publishApplicationEvent(new GroupDeletedEvent(group.getUuid()));
}
ProductService.java 文件源码 项目:dhus-core 阅读 25 收藏 0 点赞 0 评论 0
@PreAuthorize ("hasAnyRole('ROLE_DOWNLOAD','ROLE_SEARCH')")
@Transactional (readOnly=true, propagation=Propagation.REQUIRED)
public InputStream getProductThumbnail (Long id)
{
   // TODO remove method cause not used
   Product product = getProduct (id);
   if (!product.getThumbnailFlag ()) return null;
   try
   {
      return new FileInputStream (product.getThumbnailPath ());
   }
   catch (Exception e)
   {
      LOGGER.warn ("Cannot retrieve Thumbnail from product id #" + id,e);
   }
   return null;
}
TLEGroupServiceImpl.java 文件源码 项目:Equella 阅读 21 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void userIdChangedEvent(UserIdChangedEvent event)
{
    String fromUserId = event.getFromUserId();

    for( TLEGroup group : dao.getGroupsContainingUser(fromUserId) )
    {
        Set<String> users = group.getUsers();
        users.remove(fromUserId);
        users.add(event.getToUserId());

        dao.update(group);
        eventService
            .publishApplicationEvent(new GroupEditEvent(group.getUuid(), Collections.singleton(fromUserId)));
    }
}
AclDaoImpl.java 文件源码 项目:Equella 阅读 23 收藏 0 点赞 0 评论 0
@Override
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.MANDATORY)
public List<TargetListEntry> getTargetListEntries(final String target, final Collection<Integer> priorities)
{
    return getHibernateTemplate().executeFind(new TLEHibernateCallback()
    {
        @Override
        public Object doInHibernate(Session session) throws HibernateException
        {
            Query query = session.getNamedQuery("getTargetListEntries");
            query.setParameter("institution", CurrentInstitution.get());
            query.setParameterList("priorities", priorities);
            query.setString("target", target);
            return query.list();
        }
    });
}
TLEGroupServiceImpl.java 文件源码 项目:Equella 阅读 18 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void userDeletedEvent(UserDeletedEvent event)
{
    String userID = event.getUserID();

    for( TLEGroup group : dao.getGroupsContainingUser(userID) )
    {
        group.getUsers().remove(userID);

        dao.update(group);
        eventService.publishApplicationEvent(new GroupEditEvent(group.getUuid(), Collections.singleton(userID)));
    }
}
OfficialResouceController.java 文件源码 项目:OMIPlatform 阅读 24 收藏 0 点赞 0 评论 0
@PutMapping("/addResource")
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public Message addResource(@RequestBody OfficialResouce officialResouce) {
    int status = 0;
    status = this.officialResouceService.insert(officialResouce);
    Message message = new Message();
    message.setStatus(status);
    return message;
}
AbstractCopyrightDao.java 文件源码 项目:Equella 阅读 21 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.MANDATORY)
public void updateHoldingReference(H holding, List<Item> items)
{
    List<P> portions = getPortionsForItems(items);
    if( holding != null )
    {
        holding.setPortions(portions);
    }
    for( P portion : portions )
    {
        portion.setHolding(holding);
    }
}
ShopProductController.java 文件源码 项目:OMIPlatform 阅读 22 收藏 0 点赞 0 评论 0
@PostMapping("addProduct")
@Transactional(propagation = Propagation.REQUIRED)
public String insertProduct(@RequestBody EditShopProductDto productDto) throws JsonProcessingException, InvocationTargetException, IllegalAccessException {
    /*将商品基础详情转换为json串*/
    String baseProperty = "";
    baseProperty = objectMapper.writeValueAsString(productDto.getBaseProperty());
    productDto.setProBaseProperty(baseProperty);

    /*设置销量*/
    productDto.setProSalveNumber(0);
    /*设置商品为下架*/
    productDto.setProSalve(0);
    /*将图片转为字符串*/
    String proImgs = objectMapper.writeValueAsString(productDto.getImgs());
    productDto.setProImage(proImgs);
    /*存储商品*/
    this.productService.insert(productDto);

    List<ShopProductVersion> spvs = new ArrayList<>();
    for (EditShopProductVersionDto vers : productDto.getProVersion()) {
        ShopProductVersion spv = new ShopProductVersion();
        /*将商品系列中的两个详情转换为json串*/
        String dp = objectMapper.writeValueAsString(vers.getDetailProperty());
        vers.setProDetailProperty(dp);
        vers.setProId(productDto.getProId());
        /*将Dto映射到pojo*/
        BeanUtils.copyProperties(spv, vers);
        spvs.add(spv);
    }
    System.out.println(productDto.getProId());

    /*批量添加到商品系列表中*/
    this.shopProductVersionService.insertList(spvs);

    return "{\"status\":true}";
}
BamFileDao.java 文件源码 项目:NGB-master 阅读 18 收藏 0 点赞 0 评论 0
/**
 * Loads {@code BamFile} records, saved for a specific reference ID. <br>
 * @param referenceId {@code long} a reference ID in the system
 * @return {@code List&lt;BamFile&gt;} instance
 */
@Transactional(propagation = Propagation.MANDATORY)
public List<BamFile> loadBamFilesByReferenceId(long referenceId) {
    return getJdbcTemplate().query(loadBamFilesByReferenceIdQuery, BiologicalDataItemDao
            .BiologicalDataItemParameters.getRowMapper(), referenceId)
            .stream().map(f -> (BamFile) f).collect(Collectors.toList());
}
TermServiceImpl.java 文件源码 项目:Equella 阅读 24 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.REQUIRED)
public TermResult addTerm(Taxonomy taxonomy, String parentFullPath, String termValue, boolean createHierarchy)
{
    String path = insertTermImpl(taxonomy, parentFullPath, termValue, -1, createHierarchy);
    return new TermResult(termValue, path, true);
}
ResourcesController.java 文件源码 项目:OMIPlatform 阅读 24 收藏 0 点赞 0 评论 0
@PostMapping("modifyMenusByAuId/{auid}")
@Transactional(propagation = Propagation.REQUIRED)
public void modifyMenusByAuId(@PathVariable String auid, @RequestBody List<AuthorityResources> items) {


    List<String> rids = new ArrayList<>();

    List<ResourcesMenuDto> menuDtos = this.resourcesService.finMenusByAuId(auid);

    for (ResourcesMenuDto item : menuDtos) {

        if (item.getChildren() == null) {
            rids.add(item.getId());
        }
    }

    if (rids.size() < 1) {
        this.authorityResourcesService.deleteResourcesByRId(null, auid);
    } else {
        // 先删除该角色所拥有的菜单
        this.authorityResourcesService.deleteResourcesByRId(rids, auid);
    }

    if (items.size() > 0) {
        this.authorityResourcesService.insertMenus(items);
    }


}
EduCourseServiceImpl.java 文件源码 项目:OMIPlatform 阅读 60 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public int addTeacher(EduTeacher teacher, EduCourse eduCourse) {
    /*插入教师数据*/
    this.eduTheacherService.insert(teacher);

    EduCourse course = this.findByEducid(eduCourse.getEducid());
    course.setTchid(teacher.getThid());
    /*更新课程数据*/
    int result = this.eduCourseDao.update(course);
    return result;
}
DataCarBrandServiceImpl.java 文件源码 项目:mumu 阅读 19 收藏 0 点赞 0 评论 0
@Override
@Transactional(propagation = Propagation.SUPPORTS, readOnly = false)
public DataCarBrand addSystemCarBrand(DataCarBrand systemCarBrand) {
    systemCarBrand.setParentId(0);
    systemCarBrand.setStatus(PublicEnum.NORMAL.value());
    systemCarBrand.setDepth(1);
    // 添加数据
    systemCarBrand = carBrandDao.insert(systemCarBrand);
    return systemCarBrand;
}
GffManagerTest.java 文件源码 项目:NGB-master 阅读 20 收藏 0 点赞 0 评论 0
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void testRegisterGffFail() throws IOException, FeatureIndexException, InterruptedException,
        NoSuchAlgorithmException {
    Resource resource = context.getResource("classpath:templates/Felis_catus.Felis_catus_6.2.81.gtf");

    FeatureIndexedFileRegistrationRequest request = new FeatureIndexedFileRegistrationRequest();
    request.setReferenceId(referenceId);
    request.setPath(resource.getFile().getAbsolutePath());

    boolean failed = true;
    try {
        gffManager.registerGeneFile(request);
    } catch (TribbleException.MalformedFeatureFile e) {
        failed = false;
    }

    Assert.assertFalse("Not failed on unsorted file", failed);

    /*Resource fakeIndex = context.getResource("classpath:templates/fake_gtf_index.tbi");
    request.setIndexPath(fakeIndex.getFile().getAbsolutePath());

    failed = true;
    try {
        gffManager.registerGeneFile(request);
    } catch (Exception e) {
        failed = false;
    }

    Assert.assertFalse("Not failed on unsorted file", failed);*/
}
BookmarkManager.java 文件源码 项目:NGB-master 阅读 22 收藏 0 点赞 0 评论 0
/**
 * Loads {@code Bookmark} entities for a given collection of IDs
 * @param bookmarkIds collection of IDs to load
 * @return a {@code List} of {@code Bookmark} entities
 */
@Transactional(propagation = Propagation.REQUIRED)
public List<Bookmark> loadBookmarksByIds(Collection<Long> bookmarkIds) {
    List<Bookmark> bookmarks = bookmarkDao.loadBookmarksByIds(bookmarkIds);

    if (!bookmarks.isEmpty()) {
        Map<Long, List<BiologicalDataItem>> itemMap = bookmarkDao.loadBookmarkItemsByBookmarkIds(bookmarkIds);
        for (Bookmark b : bookmarks) {
            b.setOpenedItems(itemMap.get(b.getId()));
        }
    }

    return bookmarks;
}


问题


面经


文章

微信
公众号

扫码关注公众号