带@Audited 的基本模型
Base model with @Audited
我为我的基本模型使用@Audited 注释。我将其扩展到我的所有实体。但它不起作用。有什么方法可以使用
这是我的基础模型
@MappedSuperclass
@Getter
@Setter
@Audited
public abstract class BaseModelObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 4194525198831057382L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
protected Long id;
}
这是我的模型class
@Entity
public class City extends BaseModelObject {
private static final long serialVersionUID = 1L;
@Column
private String name;
}
试试这个:
超级class:
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditableEntity implements Serializable {
private static final long serialVersionUID = 1L;
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@CreatedBy
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
...
}
实体class:
@Entity
public class City extends AuditableEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
}
配置:
@EnableJpaAuditing
@SpringBootApplication
@EnableTransactionManagement
@EntityScan("foo.entities")
@ComponentScan("foo")
@EnableJpaRepositories("foo.repositories")
public class ConfigApp {
...
}
审计服务:
@Service
public class AuditorServiceImpl implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
return SecurityContextHolder.getContext().getAuthentication().getName();
}
}
@Audited
注释没有按照您认为的那样工作。通过在super class上使用它,它对扩展它的child classes没有影响,至少可以控制child 是否是 或 未被 审核。这是设计使然。
考虑我们有一个 superclass 类型和两个不同实现的概念,一个我们想用它的 superclass 属性审计,一个我们不想审计。
@MappedSuperclass
@Audited
public class Animal {}
@Entity
@Audited
public class Cat extends Animal {}
@Entity
public class Dog extends Animal {}
在这个例子中,由于 @Audited
不是继承的,仅仅将注释放在 superclass 和 Cat
实体上只会导致 Cat
被审计. Dog
实体及其超 class 属性 值不是。
如果 @Audited
被视为继承注释,我们必须引入一系列 @AuditOverride
注释来完成相同的示例,请参见下文。
@MappedSuperclass
public class Animal {}
@Entity
@Audited
@AuditOverride(...)
public class Cat extends Animal {}
@Entity
public class Dog extends Animal {}
更糟糕的是,如果 Animal
对其属性的子集进行了审核,这将影响 @AuditOverride
的数量。
当您开始研究实体继承策略以及这些策略如何影响是否审计实体,以及在层次结构的哪个级别达到何种程度时,这会变得更加复杂。
简而言之,如果您希望对 child class 进行审核,则需要对其进行明确注释。
我为我的基本模型使用@Audited 注释。我将其扩展到我的所有实体。但它不起作用。有什么方法可以使用
这是我的基础模型
@MappedSuperclass
@Getter
@Setter
@Audited
public abstract class BaseModelObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 4194525198831057382L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
protected Long id;
}
这是我的模型class
@Entity
public class City extends BaseModelObject {
private static final long serialVersionUID = 1L;
@Column
private String name;
}
试试这个:
超级class:
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditableEntity implements Serializable {
private static final long serialVersionUID = 1L;
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@CreatedBy
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
...
}
实体class:
@Entity
public class City extends AuditableEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
}
配置:
@EnableJpaAuditing
@SpringBootApplication
@EnableTransactionManagement
@EntityScan("foo.entities")
@ComponentScan("foo")
@EnableJpaRepositories("foo.repositories")
public class ConfigApp {
...
}
审计服务:
@Service
public class AuditorServiceImpl implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
return SecurityContextHolder.getContext().getAuthentication().getName();
}
}
@Audited
注释没有按照您认为的那样工作。通过在super class上使用它,它对扩展它的child classes没有影响,至少可以控制child 是否是 或 未被 审核。这是设计使然。
考虑我们有一个 superclass 类型和两个不同实现的概念,一个我们想用它的 superclass 属性审计,一个我们不想审计。
@MappedSuperclass
@Audited
public class Animal {}
@Entity
@Audited
public class Cat extends Animal {}
@Entity
public class Dog extends Animal {}
在这个例子中,由于 @Audited
不是继承的,仅仅将注释放在 superclass 和 Cat
实体上只会导致 Cat
被审计. Dog
实体及其超 class 属性 值不是。
如果 @Audited
被视为继承注释,我们必须引入一系列 @AuditOverride
注释来完成相同的示例,请参见下文。
@MappedSuperclass
public class Animal {}
@Entity
@Audited
@AuditOverride(...)
public class Cat extends Animal {}
@Entity
public class Dog extends Animal {}
更糟糕的是,如果 Animal
对其属性的子集进行了审核,这将影响 @AuditOverride
的数量。
当您开始研究实体继承策略以及这些策略如何影响是否审计实体,以及在层次结构的哪个级别达到何种程度时,这会变得更加复杂。
简而言之,如果您希望对 child class 进行审核,则需要对其进行明确注释。