3

我想要一个实体属性,休眠保存到数据库,但在重建对象时不尝试设置。

我有这样的课;

@Entity
class Quote {
    private int itemCost;
    private int quantity;

    public Quote(int itemCost, int quantity) {
        this.itemCost = itemCost;
        this.quantity = quantity;
    }

    public void setItemCost(int itemCost) {
        this.itemCost = itemCost;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public int getItemCost() {
        return this.itemCost;
    }

    public int getQuantity() {
        return this.quantity;
    }

    // This attribute "totalCost" has a getter only, no setter. 
    // It causes a runtime error (see below). 
    public int getTotalCost() {
        return this.itemCost * this.quantity;
    }
}

我想要以下数据库表;

quotes
itemCost   | quantity    | totalCost
------------------------------------
100        | 7           | 700
10         | 2           | 20
6          | 3           | 18

如您所见,“totalCost”字段可以取自getTotalCost(),但我不想有一个setTotalCost()方法,在我的应用程序中它没有任何意义。

我希望将一个字段写入不再存在的数据库的原因是set,该值可用于共享数据库的其他应用程序(即图形界面)。

显然,在运行时我目前收到此错误:

org.hibernate.PropertyNotFoundException: Could not find a setter for property totalCost in class Quote

我可以有一个空的二传手,但这是不干净的。在我的真实代码中,大约有 13 个像这样的“只读”属性,我不希望 13 个空白设置器弄乱我的代码。

有一个优雅的解决方案吗?

4

1 回答 1

3

请参阅当有 getter 时,Hibernate 是否总是需要一个 setter?

关于课堂使用

@Entity(access = AccessType.FIELD) 并注释您的属性。

或者

您可以使用 @Transient 注释来标记不应存储在数据库中的字段。您甚至可以使用 @Formula 注释让 Hibernate 为您派生字段(它通过使用它发送到数据库的查询中的公式来完成此操作)。

于 2015-11-04T09:48:51.173 回答