Hibernate @@MappedSuperclass中的ManyToOne-to-entity覆盖了子类中@ManyToOne-to-the-entity的获取策略

Hibernate @@MappedSuperclass中的ManyToOne-to-entity覆盖了子类中@ManyToOne-to-the-entity的获取策略,hibernate,spring-data-jpa,Hibernate,Spring Data Jpa,我最近在实体对象中添加了JPA审计。这是抽象类 @MappedSuperclass @JsonIgnoreProperties( { "createdBy", "lastModifiedBy", "createdDate", "lastModifiedDate" } ) public abstract class AbstractEntity<PK extends Serializable> implements Auditable<User, PK> { pr

我最近在实体对象中添加了JPA审计。这是抽象类

@MappedSuperclass
@JsonIgnoreProperties( { "createdBy", "lastModifiedBy", "createdDate", "lastModifiedDate" } )
public abstract class AbstractEntity<PK extends Serializable> implements Auditable<User, PK> {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue( strategy = GenerationType.SEQUENCE )
    private PK id;

    @ManyToOne( fetch = FetchType.LAZY )
    private User createdBy;

    @Temporal( TemporalType.TIMESTAMP )
    private Date createdDate;

    @ManyToOne( fetch = FetchType.LAZY )
    private User lastModifiedBy;

    @Temporal( TemporalType.TIMESTAMP )
    private Date lastModifiedDate;

    //Getters and Setters from here
如果我删除AbstractEntity中的可审核属性,那么
Participant.user
将被急切地获取。但是,如果我在Auditable properties
Participant.user
中离开,则会强制执行延迟提取


是否可能在多个
@manytone
关系中对同一
@Entity
有不同的获取策略,或者我必须删除
AbstractEntity.createdBy
AbstractEntity.lastModifiedBy
上的惰性提示?

我可以想到的一种方法是切换到要覆盖的属性:

因此AbstractEntity必须按如下方式更改:

private User createdBy;

private User lastModifiedBy;

private Date lastModifiedDate;

@Access(AccessType.property) 
@ManyToOne( fetch = FetchType.LAZY )
public User getCreatedBy() {
    return createdBy;
}

@Access(AccessType.property) 
@ManyToOne( fetch = FetchType.LAZY )
public User getLastModifiedBy() {
    return lastModifiedBy;
}
参与者将覆盖这些方法:

@Access(AccessType.property) 
@ManyToOne( fetch = FetchType.EAGER)
public User getCreatedBy() {
    return createdBy;
}

@Access(AccessType.property) 
@ManyToOne( fetch = FetchType.EAGER)
public User getLastModifiedBy() {
    return lastModifiedBy;
}
@Access(AccessType.property) 
@ManyToOne( fetch = FetchType.EAGER)
public User getCreatedBy() {
    return createdBy;
}

@Access(AccessType.property) 
@ManyToOne( fetch = FetchType.EAGER)
public User getLastModifiedBy() {
    return lastModifiedBy;
}