gro*_*wse 5 java postgresql jpa eclipselink
我只是在一个运行在Glassfish 3上的简单Java Web应用程序中处理JPA(持久性提供程序是EclipseLink).到目前为止,我真的很喜欢它(除了netbeans/glassfish交互中的错误)但是有一件事我希望能做到,我不知道该怎么做.
我有一个映射到数据库表(文章)的实体类(文章).我正在尝试对返回计算列的数据库执行查询,但我无法弄清楚如何设置Article类的属性,以便在调用查询时属性由列值填充.
如果我定期"选择id,title,body from article"查询,我会得到一个精美的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);
Run Code Online (Sandbox Code Playgroud)
(这是在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]);
Run Code Online (Sandbox Code Playgroud)
-
@Entity
@SqlResultSetMapping(
name = "ArticleWithHeadline",
entities = @EntityResult(entityClass = Article.class),
columns = @ColumnResult(name = "HEADLINE"))
public class Article {
@Transient
private String headline;
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11424 次 |
| 最近记录: |