讓我們說我們有一個實體:無法addProjection到關係領域envers查詢
@Entity
@Audited(withModifiedFlag = true)
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false, length = 50)
private String Name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parentEntityId")
private MyEntity parentEntity;
}
我儘量讓上表示關係實體領域envers回報實體版本信息。我使用addProjection
來創建我自己的數據表示。問題是,每次我使用addProjection
時,表示關係的字段的名稱出現錯誤(如果使用oridinary列,則沒有錯誤)。
我建立一個審計查詢:
AuditQuery auditQuery = reader.createQuery()
.forRevisionsOfEntity(MyEntity.class, false, true);
auditQuery.addProjection(AuditEntity.revisionNumber());
auditQuery.addProjection(AuditEntity.revisionType());
auditQuery.addProjection(AuditEntity.revisionProperty("timestamp"));
auditQuery.addProjection(AuditEntity.id());
auditQuery.addProjection(new AuditProperty<>(
new EntityPropertyName("parentEntity")));
auditQuery.addProjection(new AuditProperty<>(
new ModifiedFlagPropertyName(
new EntityPropertyName("parentEntity"))));
和錯誤是:
org.hibernate.QueryException: could not resolve property: parentEntity of: edu.sample.domain.entity.MyEntity_AUD
我也試過:new EntityPropertyName("parentEntityId")
- 結果是:
org.hibernate.QueryException: could not resolve property: parentEntityId of: edu.sample.domain.entity.MyEntity_AUD
編輯 : 我錯過了Audit que中的一條語句RY。該投影應該包含parentEntity字段值,不僅修改標誌: auditQuery.addProjection(new AuditProperty<>( new EntityPropertyName("parentEntity")));
我需要該字段的值和信息(如果它已被修改)。這就是爲什麼我使用withModifiedFlag = true
問題是MyEntity_AUD表(自動生成)的模式包含字段parentEntityId
。修改的標誌字段名稱是parentEntity_MOD
。添加到查詢以下投影后的誤差體現:
addProjection(new AuditProperty<>( new EntityPropertyName("parentEntity")));
或
addProjection(new AuditProperty<>( new EntityPropertyName("parentEntityId")));
的修改標誌被正確無誤返回。以及普通領域的價值。
當指定'selectOnlyEntities = false'時,爲什麼需要使用投影而不是使用返回的Object []',是否有一個特定的原因? – Naros