${size}
}
@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;
......
我试图通过fkCommentedBy属性在getCommentedEmployee()方法中找到一个EmployeeInfo对象,并将其设置为@Transient属性commentedEmployee。
我发现了以下错误:
@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;
}
}
}
我该如何解决?
答案 0 :(得分:1)
@Transient的目的是为非持久属性建模,因此我不清楚为什么要在通过“ 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对象具有有效的引用。由于ProjectTaskComments不是spring托管的bean,因此@Autowired在这里不起作用。
答案 1 :(得分:0)
同意@KishoreKirdat,请检查是否为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
}
答案 2 :(得分:0)
是的,最终我可以解决它。我刚刚做了以下工作:
在ProjectTaskComments类中添加了@Component:
@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;
}