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。
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
}
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;
}
添加回答
举报