猿问

如何将实体对象绑定到本地 @Transient 属性?

EmployeeInfo 实体类

@Entity

@Table(name = "employeeinfo")

public class EmployeeInfo{


@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private Long id;

@Column(name = "employeeId")

private String employeeId;

@Column(name = "firstName")

private String firstName;

@Column(name = "middleName")

private String middleName;

@Column(name = "lastName")

private String lastName;


......

}


另一个实体类 ProjectTaskComments

@Entity

@Table(name = "projecttaskcomments")

public class ProjectTaskComments{

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Basic(optional = false)

    @Column(name = "id")

    private Long id;

    @Basic(optional = false)

    @Column(name = "comments")

    private String comments;


    @Basic(optional = false)

    @Column(name = "commentTime")

    @Temporal(TemporalType.TIMESTAMP)

    private Date commentTime;

    @Column(name = "fkCommentedBy")

    private Long fkCommentedBy;



    @Transient

    @JsonIgnoreProperties

    private EmployeeInfo commentedEmployee;

    @Transient

    @Autowired

    EmployeeInfoService employeeInfoService; 



   public EmployeeInfo getCommentedEmployee() {

        EmployeeInfo employeeInfo;

        employeeInfo = employeeInfoService.getSingleEmployeeInfoByFkUserId(this.fkCommentedBy);

        if(employeeInfo != null) {

            this.commentedEmployee.setEmployeeId(employeeInfo.getEmployeeId());

            this.commentedEmployee.setFirstName(employeeInfo.getFirstName());

            this.commentedEmployee.setMiddleName(employeeInfo.getMiddleName());

            this.commentedEmployee.setLastName(employeeInfo.getLastName());

            this.commentedEmployee.setPhoto(employeeInfo.getPhoto());

            return commentedEmployee;

        } else {

            return null;

        }

    }


}

我试图通过 fkCommentedBy 属性在 getCommentedEmployee() 方法中找到一个 EmployeeInfo 对象,并将其设置为 @Transient 属性 commentedEmployee。

我该如何解决?


潇湘沐
浏览 158回答 3
3回答

翻翻过去那场雪

目的是为一个非持久属性建模,所以我不清楚为什么当你通过“fkCommentedBy”属性持久化它时,你为什么要在 commentedByEmployee 属性上使用 @Transient。IMO,@ManyToOne 在这种情况下更合适。@Entity@Table(name = "projecttaskcomments")public class ProjectTaskComments {// .... other declarations @ManyToOne@JoinColumn(name="fkCommentedBy")private EmployeeInfo commentedEmployee;// ..... other code}现在,如果您仍然想使用@Transient,那么在 getter 方法中,您需要确保您拥有对 EmployeeInfoService 对象的有效引用。@Autowired 在这里不起作用,因为 ProjectTaskComments 不是 spring 管理的 bean。

HUH函数

需要检查 null 并进行一些初始化:public EmployeeInfo getCommentedEmployee() {  // check here  if (employeeInfoService == null) return null;  EmployeeInfo employeeInfo = employeeInfoService.getSingle...;  if (employeeInfo != null) {    // init here    commentedEmployee = new EmployeeInfo();    commentedEmployee.set...;    return commentedEmployee;  } else {    return null;  }}private void setCommentedEmployee(EmployeeInfo employeeInfo) {  // do nothing}

弑天下

是的,我终于可以解决它了。我只是做了以下工作:将 @Component 添加到 ProjectTaskComments 类:@Entity    @Component    @Table(name = "projecttaskcomments")    public class ProjectTaskComments{........将 EmployeeInfoService 声明为静态并为该服务添加了一个 seter 方法并@Autowired 它。@Transientprivate static EmployeeInfoService employeeInfoService;@Autowiredpublic void setEmployeeInfoService(EmployeeInfoService employeeInfoService) {    this.employeeInfoService = employeeInfoService;}
随时随地看视频慕课网APP

相关分类

Java
我要回答