spring - Spring Hibernate - 使用@Formula从基于其他表的最大值中获取列值
问题描述
我有两个具有一对多关系的表。铅和铅活动。一个潜在客户可以有多个活动。
问题陈述 - 我想在潜在客户表中增加一列来了解任何潜在客户的最后修改日期。上次修改日期将是上次创建或更新活动的日期。所以,我使用@Formula 来获取列。但是,我无法获得正确的日期,而是获得字段 lastModifiedDate 的空值。任何人都可以帮助我哪里出错。下面是表结构
@Entity
@Table(name = "customer_lead")
@Where(clause = ReusableFields.SOFT_DELETED_CLAUSE)
@Audited(withModifiedFlag = true)
@Data
public class Lead extends ReusableFields implements Serializable
{
//other fields
@NotAudited
@Formula("(Select max(modified) from lead_activity la Where la.lead_id=lead_id)")
Date lastModifiedDate;
}
铅活动
@Entity
@Table(name = "LeadActivity")
@Data
@Where(clause = ReusableFields.SOFT_DELETED_CLAUSE)
public class LeadActivity extends ReusableFields implements Serializable
{
// other fields
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "lead_id", nullable = false)
@JsonIgnoreProperties(
{ "hibernateLazyInitializer", "handler" })
@NotFound(action = NotFoundAction.IGNORE)
Lead lead;
}
修改字段的映射超类
@MappedSuperclass
@Audited
public class ReusableFields implements Serializable
{
public static final String SOFT_DELETED_CLAUSE = "is_deleted = 'false'";
@Column(name="is_deleted", columnDefinition="BOOLEAN DEFAULT true")
public boolean isDeleted;
@CreationTimestamp
@Column(name = "created_at")
@JsonProperty("created")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss ")
private Date created;
@Column(name = "updated_at")
@JsonProperty("updated")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
@UpdateTimestamp
private Date modified;
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getModified() {
return modified;
}
public void setModified(Date modified) {
this.modified = modified;
}
public boolean isDeleted() {
return isDeleted;
}
public void setDeleted(boolean isDeleted) {
this.isDeleted = isDeleted;
}
public static String getSoftDeletedClause() {
return SOFT_DELETED_CLAUSE;
}
}
解决方案
通过添加以下公式来处理此问题
@NotAudited @Formula("(Select max(la.updated_at) from Lead_Activity la Where la.lead_id=lead_id)") 日期 lastModifiedDate;
推荐阅读
- mysql - 插入语句节点-Red、MySQL、JSON
- python - 使用 librosa 时出现“无后端错误”
- azure - 是否必须具有 md5-content 属性才能让雪管从 azure adls gen2 自动摄取文件?
- java - 调用 void 方法后 Mockito 断言
- python - FLASK render_template 每次指定模板文件夹
- rdf - 您如何表达某个主题与 RDF 语义三元组中的任何事物相关?
- rasa - 在 rasa-x 上使用 MITIE 部署 rasa 模型,但出现错误
- android - Android:FingerprintManager onAuthenticationSucceeded 之后的下一步是什么?
- python-3.x - 如何在 pymongo 中为“IN”子句查询包含 NULL 或 None 值?
- python - 如何使用 NUMBA 加速我的 python 代码?