3
我有Spring MVC + JPA應用程序。審覈實體變更JPA
我有不斷變化的應用程序中的幾個實體。我希望能夠審覈這些變化。我發現有一個@Audited
批註可跟蹤對某些字段或整個實體的更改。我想知道是否有任何方法來配置這個軌道選項 - 我希望能夠跟蹤什麼被改變了,誰改變了它。還有可能在SQL中的一個表中有幾個實體的改變?還有可能跟蹤 - @OneToMany
實體中字段的更改嗎?
謝謝
我有Spring MVC + JPA應用程序。審覈實體變更JPA
我有不斷變化的應用程序中的幾個實體。我希望能夠審覈這些變化。我發現有一個@Audited
批註可跟蹤對某些字段或整個實體的更改。我想知道是否有任何方法來配置這個軌道選項 - 我希望能夠跟蹤什麼被改變了,誰改變了它。還有可能在SQL中的一個表中有幾個實體的改變?還有可能跟蹤 - @OneToMany
實體中字段的更改嗎?
謝謝
是的,您可以跟蹤所做的更改,更新的用戶和時間戳。
Hibernate提供@Audited
註釋來維護實體版本。
Spring提供@CreatedBy
@LastModifiedBy
@CreatedDate
和@LastModifiedDate
註解,在這些需要提供使用AuditorAware
豆誰更新的用戶名。
要啓用審計,
@EnableJpaAuditing
對實體@Audited
和@EntityListeners(AuditingEntityListener.class)
AuditorAware<T>
提供的用戶名@Audited
實施例
@Bean
public AuditorAware<String> createAuditorProvider() {
return() -> "username"; // should be from context/session
}
對於一個額外的表將被創建,以保持每個版本的實體
{ENTITY_NAME}_AUD
//可以覆蓋審計表名稱的前綴和後綴REVINFO
下面是一個與休眠和春季審計的一對多關係的例子
UserInfo.java
@Audited
@Entity
@EntityListeners(AuditingEntityListener.class)
public class UserInfo extends AuditInfo {
@Id
@GeneratedValue
private Long id;
@Column
private String name;
@OneToMany(mappedBy = "userInfo", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<UserAddress> addresses;
}
UserAddress.java
@Entity
@Audited
@EntityListeners(AuditingEntityListener.class)
public class UserAddress extends AuditInfo {
@Id
@GeneratedValue
private Long addressId;
@ManyToOne
@JoinColumn(name = "id", nullable = false)
private UserInfo userInfo;
@Column
private Long no;
@Column
private String street;
}
AuditInfo.java
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public abstract class AuditInfo {
@CreatedBy
private String createdBy;
@LastModifiedBy
private String updatedBy;
@CreatedDate
private LocalDateTime createdOn;
@LastModifiedDate
private LocalDateTime updatedOn;
}
我可以使用Hibernate JPA和Spring數據JPA同一時間?我無法識別@EnableJpaAuditing。我需要爲此導入什麼庫? – Purmarili
'spring-data-jpa','hibernate-jpa'和'hibernate-envers' – Saravana
嗨我很晚了,請問這些表是如何創建的? – Vipul