我可以在捕获区域中持有一个物体吗?

时间:2017-05-12 17:33:24

标签: java jpa exception java-ee try-catch

就我而言,文章和标签是单向的ManyToMany关系。

Article.class

@Entity
public class Article implements Serializable {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    @ManyToMany 
    @JoinTable(name = "ARTICLE_TAG", joinColumns = @JoinColumn(name = "ARTICLE_ID"), inverseJoinColumns = @JoinColumn(name = "TAG_ID"))
    private Set<Tag> tags;

    ...

}

Tag.class

@Entity
public class Tag implements Serializable {


    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String tagValue;

    // tagType can be category or keyword
    private TagType tagType;

}

所以你可以看到,我需要在我的文章中设置标签。有些标签之前可能已经保存到数据库中,因此我的服务方法将首先检查它,如果标签已经存在,则进行设置。如果没有,该方法将导致NoResultException,然后我捕获Exception并希望在catch字段中执行save操作以及设置标记。这是代码

ArticleSerivce.class

public void createArticle(ArticleDTO articleDTO) throws Exception {
    Article article = new Article();

    // check and then set tags;
    Set<Tag> tags = new HashSet<>();
    tags.addAll(validateKeywords(articleDTO.getKeywords()));
    article.setTags(tags);

    ...

    articleService.createArticle(article);
}

private Set<Tag> validateKeywords(String[] keywords) {
    Set<Tag> tags = new HashSet<>();
    if (keywords.length != 0) {
        for (String keyword : keywords) {
            try {
                // first check that if the tag is already existed
                Tag tag = tagService.findTagByValue(keyword);
                tags.add(tag);
            } catch (NoResultException e) {
                System.err.println(e.getMessage());
                // if doesn't existed, then create it
                Tag tag = new Tag(TagType.KEYWORD);
                tag.setTagValue(keyword);
                tagService.createTag(tag);
                tags.add(tag);
            }
        }
    }

    return tags;
}

问题是,我确实发现 NoResultException 已被捕获,因为信息已在输出控制台中打印,我还调试了应用程序并发现标签已创建但是有线ID (想象我的dataTable中已经有4个标签,他们的id是1,2,3,4,然后我创建了3个不存在的标签,但id为5,6, null < / em>,为什么最后一个人的身份不是 7 ?)。最后,文章无法创建,输出控制台中没有错误或任何信息,当然,我的文章dataTable中没有记录。它是如此有线!那有什么不对?我想也许在捕获领域发生了一些事情。所以请帮助我,非常感谢你!

0 个答案:

没有答案