当前位置: 首页 > 面试题库 >

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

聂风史
2023-03-14
问题内容

我只是在Glassfish 3(持久性提供程序是EclipseLink)上运行的简单Java
Web应用程序中了解JPA。到目前为止,我真的很喜欢它(除了netbeans / glassfish交互中的错误),但是我想做到的事情我不确定该怎么做。

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

如果我执行常规的“从文章中选择id,title,body”查询,则会得到很好的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;
    ...
}


 类似资料:
  • 对JPA来说比较新,所以我有一个架构问题。假设我有多对一关系的员工和部门表(即许多员工为一个部门工作): 所以我可以为员工和部门定义合适的实体,没有问题。但是,在一个视图中,我想显示部门列表,其中包含为该部门工作的员工数量,类似于这样: 我只是不确定使用JPA实现这一目标的正确策略是什么。。。我不想总是获取部门实体的员工数量,因为需要时只有一个视图。 看起来HiberNate的@公式是一种可能的方

  • 问题内容: 我目前正在为电子商务平台的产品部分设计数据库结构。它的设计方式应使得可以销售无限数量的具有不同属性的不同类型的产品。 例如,一台笔记本电脑的属性为RAM,屏幕尺寸,重量等。一本书的属性为Author,ISBN,Publisher等。 看来,EAV结构将是最合适的。 选择一个产品 产品属于属性集 属性集包含属性x和y 属性x是数据类型datetime(存储在attribute_value

  • 我有3个实体- > 课程 组件 时间线课程是一个独立的实体,具有以下属性:课程-(id Integer主键,Course_name) @ Id @ Column(name = " Id ")Integer courseId;@Column(name = "course_name ")字符串course _ name; 接下来是另一个实体模块,模块中的每一行都与一门课程相关,因此模块和课程之间存在一

  • 可以使用Setter和Getter方法完成计算属性的设置。 它管理在computed属性中声明的变量的值。 set()方法计算程序中指定的特定条件的值, get()方法从setter获取值并显示数据。 语法 (Syntax) var ClassName = Ember.Object.extend ({ funcName: Ember.computed(function(){ re

  • 当我将Java EE应用程序部署到Glassfish时,我有一个非常奇怪的问题。我有一个Eclipse EAR项目,它引用了一个Web项目(包含一个servlet),一个EJB项目(有一个EJB)和一个JPA项目(有一个@Entity)。在我的 servlet 中,我调用 EJB,它又执行以下查询: 在上面代码的第三行,我得到了一个异常: 我已经调试了上面提到的Hibernate类,即Metamo

  • 我正在做一个小的测试项目,将数据持久化到一个简单的数据库中。我在设置数据实体时遇到了困惑和问题,需要一些帮助。 我将此开发为Spring Boot Java项目,并使用JPA实现持久性功能。我对JPA不是很熟悉。 考虑以下模拟模式: 任务: 任务说明: 状态更改历史: 我不确定注释和构造这些类以促进这种安排的正确方法。我也不确定其中一些关系本质上应该是单向的还是双向的。我看过关于建立单向和双向关系