我想有一个hibernate保存到数据库的实体属性,但是在重建对象时不会尝试设置。
我有这样的课程;
@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个空白的setter混乱我的代码。
这有一个优雅的解决方案吗?
答案 0 :(得分:3)
请参阅Does Hibernate always need a setter when there is a getter?:
关于班级使用
@ Entity(access = AccessType.FIELD)并注释您的属性。
或
您可以使用@Transient注释来标记它不应存储在数据库中的字段。您甚至可以使用@Formula注释让Hibernate为您派生字段(它通过使用它发送到数据库的查询中的公式来实现)。