为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2021-11-11 15:49:58
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。我该如何解决?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

目的是为一个非持久属性建模,所以我不清楚为什么当你通过“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。


查看完整回答
反对 回复 2021-11-11
?
HUH函数

TA贡献1836条经验 获得超4个赞

需要检查 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

}


查看完整回答
反对 回复 2021-11-11
?
弑天下

TA贡献1818条经验 获得超8个赞

是的,我终于可以解决它了。我只是做了以下工作:


将 @Component 添加到 ProjectTaskComments 类:


@Entity    

@Component    

@Table(name = "projecttaskcomments")    

public class ProjectTaskComments{

........

将 EmployeeInfoService 声明为静态并为该服务添加了一个 seter 方法并@Autowired 它。


@Transient

private static EmployeeInfoService employeeInfoService;


@Autowired

public void setEmployeeInfoService(EmployeeInfoService employeeInfoService) {

    this.employeeInfoService = employeeInfoService;

}


查看完整回答
反对 回复 2021-11-11
  • 3 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信