gpt4 book ai didi

java - JPA - 从计算列设置实体类属性?

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:24 25 4
gpt4 key购买 nike

我刚刚开始在 Glassfish 3(持久性提供程序是 EclipseLink)上运行的简单 Java Web 应用程序中掌握 JPA。到目前为止,我真的很喜欢它(撇开 netbeans/glassfish 交互中的错误),但有一件事我希望能够做到,但我不确定该怎么做。

我有一个映射到数据库表(文章)的实体类(文章)。我正在尝试对返回计算列的数据库进行查询,但我不知道如何设置 Article 类的属性,以便在调用查询时该属性由列值填充。

如果我执行常规的“从文章中选择 id、标题、正文”查询,我会得到一个很好的 Article 对象列表,其中填充了 id、title 和 body 属性。这很好用。

但是,如果我执行以下操作:

Query q = em.createNativeQuery("select id,title,shorttitle,datestamp,body,true as published, ts_headline(body,q,'ShortWord=0') as headline, type from articles,to_tsquery('english',?) as q where idxfti @@ q order by ts_rank(idxfti,q) desc",Article.class);

(这是在 Postgres 上使用 tsearch2 的全文搜索——它是特定于数据库的函数,所以我使用的是 NativeQuery)

您可以看到我正在获取一个计算列,称为标题。如何将标题属性添加到我的 Article 类,以便该查询填充它?

到目前为止,我已经尝试将它设置为@Transient,但最终它始终为 null。

最佳答案

可能没有什么好的办法,只能手动:

Object[] r = (Object[]) em.createNativeQuery(
"select id,title,shorttitle,datestamp,body,true as published, ts_headline(body,q,'ShortWord=0') as headline, type from articles,to_tsquery('english',?) as q where idxfti @@ q order by ts_rank(idxfti,q) desc","ArticleWithHeadline")
.setParameter(...).getSingleResult();

Article a = (Article) r[0];
a.setHeadline((String) r[1]);

-

@Entity
@SqlResultSetMapping(
name = "ArticleWithHeadline",
entities = @EntityResult(entityClass = Article.class),
columns = @ColumnResult(name = "HEADLINE"))
public class Article {
@Transient
private String headline;
...
}

关于java - JPA - 从计算列设置实体类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2927836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com