首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何声明和使用未传输到/从数据库的属性

如何声明和使用未传输到/从数据库的属性
EN

Stack Overflow用户
提问于 2016-03-05 23:20:56
回答 2查看 51关注 0票数 0

在我的数据模型中,我有一个具有两个数值属性的实体,映射到一个具有适当列的表,另外还有一个属性,例如:

代码语言:javascript
复制
@Entity
@Table(name="rectangles")
public class Rectangle {

    private int sideA;
    private int sideB;

    @Basic public int getSideA() { return sideA; }
    @Basic public int getSideB() { return sideB; }

    //What annotations should I use here?
    public int getArea() { return sideA * sideB; }

    //...corresponding setters for sideA and sideB
    ...
}

现在,我的问题是:我可以(怎么做?)标记一个属性Area,这样它仍然可以通过应用程序(其getter)计算,在数据库中不会有相应的列,但是可以在查询、标准构建器API等中使用(按名称引用)。如果我标记它为@Transient,我就不能在查询中使用它。如果我以任何其他方式注释它,我需要将它映射到某个列。我遗漏了什么?这能用常规的JPA做吗?冬眠?还是一点也不?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-06 09:56:32

您不能在查询中使用Java计算的属性:查询被转换为SQL并由数据库执行,数据库不知道也不关心Java代码。

可以向实体中添加一个附加的持久化字段,并使用公式进行注释。但是要小心:修改sideA,然后获取该区域将返回旧的区域,在从数据库读取实体时由数据库计算。另外,公式是Hibernate特有的.JPA不支持。

票数 1
EN

Stack Overflow用户

发布于 2016-03-06 10:27:13

您可以用@Transient注释该属性。但是请记住,在您的hql查询中,该属性不再可用。

使用@Forumlar,您可以使用查询中的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35821135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档