我想获取懒惰的用户实体,但它不起作用

问题描述 投票:0回答:1

我有我的实体

@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 引用中使用对用户的引用,因为该类在我不需要有关用户的信息的地方扩展了更多。

java hibernate entity relationship
1个回答
0
投票

您的问题是 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;
© www.soinside.com 2019 - 2024. All rights reserved.