Hibernate @@MappedSuperclass中的ManyToOne-to-entity覆盖了子类中@ManyToOne-to-the-entity的获取策略
我最近在实体对象中添加了JPA审计。这是抽象类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
@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 propertiesParticipant.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;
}