用Hibernate填充模型省略一些字段

时间:2015-04-03 22:08:50

标签: hibernate hql

我需要对数据库进行查询,但我不知道该怎么做。

我有一个实体文章和一个实体标签。一篇文章可以有多个标签。如果我从数据库中检索整篇文章,则可以在Article实体的articleTags字段中找到标记列表。

来自文章:

@OneToMany(mappedBy = "article", cascade = CascadeType.ALL)
@JsonManagedReference("article-articleTags")
private Set<ArticleTag> articleTags;

来自ArticleTag(中间模型):

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "article_id")
@JsonBackReference("article-articleTags")
private Article article;

并标记:

@OneToMany(mappedBy = "tag")
@JsonBackReference("tags-articleTags")
private Set<ArticleTag> articleTags;

在ArticleDaoImpl中,以下query = getCurrentSession().createQuery("from Article a where a.link = "foo.bar"使用映射到Article的所有集合填充实体。

问题是我有一个字段html_content,它是一个包含文章html内容的blob。这是性能下降,我想要做的是从Article表(包括映射的集合)中检索数据,但没有这个字段。

如果我在文章中创建自定义构造函数,而不是获取所需的数据,我不知道如何填充集合。

我不想做两个单独的查询(检索部分文章及其标签),这就是为什么我要问是否有可能做我想做的事情。

修改

使用@Basic注释无济于事,因为Jackson在尝试序列化到JSP时正在调用数据库。我不想使用@JsonIgnore,因为我有时需要在JSP中使用该字段。 我可能不清楚我正在做什么:

  • 在我90%的案例中,我想要JSP中没有htmlContent的文章。

  • 但我也不希望从数据库中检索该字段,所以我希望以某种方式提取懒惰,当我有这样的东西时 在JSP中article.htmlContent,只有调用数据库才会发生;

作为注释:我实现了Open View in View模式,因此我可以从JSP访问惰性字段。

0 个答案:

没有答案