我有我的实体
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = { "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate" }, allowGetters = true)
public abstract class AbstractAuditingEntity<T> implements Serializable {
private static final long serialVersionUID = 1L;
public abstract T getId();
@NotNull
@CreatedBy
@Column(name = "created_by", nullable = false, length = 13, updatable = false)
private String createdBy;
@NotNull
@CreatedDate
@Column(name = "created_date", updatable = false)
private Instant createdDate = Instant.now();
@LastModifiedBy
@Column(name = "last_modified_by", length = 13)
private String lastModifiedBy;
@LastModifiedDate
@Column(name = "last_modified_date")
private Instant lastModifiedDate = Instant.now();
//GETTER AND SETTER
}
第二堂课
package cnas.gov.md.domain;
import cnas.gov.md.domain.enumeration.DecisionStatus;
import java.io.Serializable;
import java.time.Instant;
import java.util.UUID;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
/**
* A Decision.
*/
@Entity
@Table(name = "decision")
@SuppressWarnings("common-java:DuplicatedBlocks")
public class Decision extends AbstractAuditingEntity<UUID> implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private UUID id;
@Column(name = "decision_nr")
private String decisionNr;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private DecisionStatus status;
@OneToOne
@JoinColumn(name = "application_id", referencedColumnName = "id")
private Application application;
@NotNull
@Column(name = "order_nr", nullable = false)
private Integer orderNr;
@Column(name = "examined_date")
private Instant examinedDate;
@Column(name = "examined_by")
private String examinedBy;
@Column(name = "verified_date")
private Instant verifiedDate;
@Column(name = "verified_by")
private String verifiedBy;
@Column(name = "approved_date")
private Instant approvedDate;
@Column(name = "approved_by")
private String approvedBy;
@OneToOne
@JoinColumn(name = "created_by", referencedColumnName = "login", insertable = false, updatable = false)
private User createdUser;
@OneToOne
@JoinColumn(name = "last_modified_by", referencedColumnName = "login", insertable = false, updatable = false)
private User lastModifiedUser;
}
如果可能的话,我想获取惰性的createdUser和lastModifiedUser,并在我想要实体图时使用急切的获取,我尝试使用fetch = LAZY但它不起作用。我需要这个来获取有关用户的一些信息,是的,我不能在我的 AbstractAuditingEntity 引用中使用对用户的引用,因为该类在我不需要有关用户的信息的地方扩展了更多。
您的问题是 OneToOne 关系。根据这个 为一对一关联配置延迟加载并不像为其他关联配置那么容易。
在某些 Hibernate 版本中,您可以将 @OneToOne 注释的可选属性设置为 false 以避免急切获取。然后,Hibernate 总是使用代理对象初始化手稿属性。不幸的是,这并不适用于所有 Hibernate 版本。如果它适用于您的 Hibernate 版本,您需要做好准备,它可能会随着未来的更新而改变。我的意思是这样的:
@OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "last_modified_by", referencedColumnName = "login", insertable = false, updatable = false)
private User lastModifiedUser;