JPA 从其他字段计算字段
JPA calculated field from other fields
我正在开发一个系统,我需要根据同一实体中的其他属性计算点数,即:
@Column(name = "distance")
private Integer distance;
@Column(name = "speed")
private Integer speed;
@Column(name = "calories")
private Integer calories ??
我需要根据速度和距离计算卡路里并保存这个值..
您不需要保留它们 - 因为您可以随时获取 sum 的值。你为什么要拯救它?
@瞬态
public Integer getSum(){
return (distance + speed) * calories
}
使用@Transient可以不在DB中保存这个值。
创建一个新方法,例如 updateCalories()
从 距离 和 速度[计算当前 卡路里 =18=]。每当 distance, speed 或其他相关字段发生变化(setters, constructor)时调用此方法或使用实体侦听器在实体是时自动调用该方法created/updated(@PreUpdate、@PrePersist...)
我有两种选择
选项 1:@Formular
@Formula("speed * distance")
private int calories;
卡路里在数据库中没有自己的列,但您可以通过 getter 访问它们。每次从数据库中获取实体时都会计算卡路里(值在内存中)。 @Formula 的一个优点是你可以在那里写一个完整的命名查询,它可能引用不同的 table 值
选项 2:@PreUpdate and/or @PrePersist
private int calories;
@PreUpdate
@PrePersist
public void calc() {
calories = speed * distance;
}
在此选项中,卡路里在数据库中有其自己的列!
如果您使用 EntityManager
坚持一个实体,它已经计算并坚持
我正在开发一个系统,我需要根据同一实体中的其他属性计算点数,即:
@Column(name = "distance")
private Integer distance;
@Column(name = "speed")
private Integer speed;
@Column(name = "calories")
private Integer calories ??
我需要根据速度和距离计算卡路里并保存这个值..
您不需要保留它们 - 因为您可以随时获取 sum 的值。你为什么要拯救它? @瞬态
public Integer getSum(){
return (distance + speed) * calories
}
使用@Transient可以不在DB中保存这个值。
创建一个新方法,例如 updateCalories()
从 距离 和 速度[计算当前 卡路里 =18=]。每当 distance, speed 或其他相关字段发生变化(setters, constructor)时调用此方法或使用实体侦听器在实体是时自动调用该方法created/updated(@PreUpdate、@PrePersist...)
我有两种选择
选项 1:@Formular
@Formula("speed * distance")
private int calories;
卡路里在数据库中没有自己的列,但您可以通过 getter 访问它们。每次从数据库中获取实体时都会计算卡路里(值在内存中)。 @Formula 的一个优点是你可以在那里写一个完整的命名查询,它可能引用不同的 table 值
选项 2:@PreUpdate and/or @PrePersist
private int calories;
@PreUpdate
@PrePersist
public void calc() {
calories = speed * distance;
}
在此选项中,卡路里在数据库中有其自己的列! 如果您使用 EntityManager
坚持一个实体,它已经计算并坚持