如何声明和使用未传输 to/from 的 属性 数据库

How to declare and use a property that's not transferred to/from database

在我的数据模型中,我有一个具有两个数字属性的实体,映射到具有适当列的 table 和一个额外的 属性,例如:

@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 来完成吗?与休眠?或者根本没有?

谢谢。

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

您可以向您的实体添加一个额外的持久字段,用 Formula 注释。但要小心:修改 sideA 然后获取区域将 return 你是旧区域,这是在从数据库中读取实体时由数据库计算的。此外,Formula 是特定于 Hibernate 的。 JPA 不支持它。

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

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