2 回答
TA贡献1900条经验 获得超5个赞
首先,@Transient来自 JPA ,与 Spring 无关。
其次,为了能够让Spring注入bean Employee,Employee还需要注册为spring bean。但实际上,您可以认为 Employee 是由 JPA 实现在幕后使用“new”创建的。这就是为什么 spring 不能自动将其他 bean 连接到它。
如果您确实需要这样做,您可以AspectJ按照文档中的描述进行操作。
我个人没有尝试这种方法,因为你可以简单地让你SalaryService接受Employee作为其参数之一来计算他的工资,这比该方法更简单且易于理解AspectJ。
public interface SalaryService {
public double computeSalary(Employee employee , List<Benefit> benefits, List<Deduction> deductions);
}
客户端代码如下所示:
@Service
public class EmployeeService {
@Autowired
private SalaryService salaryService;
@Transactional
public void computeEmployeeSalary(Integer employeeId){
Employee employee = entityManager.find(Employee.class , employeeId);
salaryService.computeSalary(employee, .... ,.....);
}
}
TA贡献1818条经验 获得超3个赞
实体对象是由 JPA 实现(如 Hibernate)创建的,而不是由 spring 管理的。
它们既不是单例也不是原型,所以一般来说,您不能在实体 bean 的属性上使用自动装配(因为自动装配只能在 spring bean 上完成)。
添加回答
举报