Spring 服务无法在实体类中自动连线
我需要一个RoleMappingService类(由@Service注释)对象进入Employee类(由@Entity注释)Spring 服务无法在实体类中自动连线,spring,jpa,Spring,Jpa,我需要一个RoleMappingService类(由@Service注释)对象进入Employee类(由@Entity注释) @Configurable @Component @Entity @NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employee e") public class Employee implements Serializable, UserDetails { @Autowired
@Configurable
@Component
@Entity
@NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employee e")
public class Employee implements Serializable, UserDetails {
@Autowired
@Transient
RoleMappingsService roleMappingsService;
public static final String STATUS_ACTIVE = "ACTIVE";
public static final String STATUS_INACTIVE = "INACTIVE";
public static final String STATUS_LOCKED = "LOCKED";
public static final String STATUS_ONLEAVE = "ONLEAVE";
public static final String STATUS_EXPIRED = "EXPIRED";
private static final long serialVersionUID = 1L;
@Id
@Column(name = "emp_id")
private String empId;
@Column(name = "emp_password")
private String empPassword;
@Column(name = "emp_email")
private String empEmail;
@Column(name = "emp_address")
private String empAddress;
@Column(name = "emp_age")
private int empAge;
@Column(name = "emp_firstname")
private String empFirstname;
}
下面是我的课程
*********************角色映射服务类**********************
@Service
public class RoleMappingsService {
@Autowired
RolesMappingDao rolesMappingDao;
public List<RolesMappings> getRolesMappingByauthSystemRole(String authSystemRole) {
return rolesMappingDao.getRolesMappingByauthSystemRole(authSystemRole);
}
}
此处Autowire不适用于roleMappingsService,并且对象始终为空。然而,我试图在其他一些服务中自动连接相同的对象,并且自动连接可以完美地工作
(我知道实体类仅用于表示数据库表,但在我的情况下,我需要设置一些依赖于另一个表的字段值,因此需要使用服务获取数据)JB Nizet完全正确 我将在这里提供更多的解释 Spring只能自动关联bean、它管理的对象,而不能自动关联任意对象 实体通常是从JPA(Hibernate)中创建的,您不希望Spring管理这些实体 有一个相关的讨论,但底线是你不应该这样做 为什么不呢? 以下是几个问题/原因:
- 也许这些实体将完全脱离spring上下文(序列化),那个引用应该包含什么?我们还应该序列化服务吗?怎么做
- 如果转向服务的方法在spring驱动的应用程序(甚至可能在不同的JVM中)之外被调用,会发生什么
- 如果该查询返回了1000个对象,那么您真的希望所有对象都驻留在应用程序上下文中吗?或者它们应该属于“原型”范围
因此,与尝试将服务注入实体bean不同,您可能应该重新设计应用程序,以便从外部调用服务方法(可能通过某个门面),实体将通过查询填充,然后使用附加信息“丰富”,如果我们谈论的是选择查询,或者,一些信息应该预先设置在实体对象上,由业务逻辑层生成,只有这样实体对象才应该存储在DB中,这是完全正确的 我将在这里提供更多的解释 Spring只能自动关联bean、它管理的对象,而不能自动关联任意对象 实体通常是从JPA(Hibernate)中创建的,您不希望Spring管理这些实体 有一个相关的讨论,但底线是你不应该这样做 为什么不呢? 以下是几个问题/原因:
- 也许这些实体将完全脱离spring上下文(序列化),那个引用应该包含什么?我们还应该序列化服务吗?怎么做
- 如果转向服务的方法在spring驱动的应用程序(甚至可能在不同的JVM中)之外被调用,会发生什么
- 如果该查询返回了1000个对象,那么您真的希望所有对象都驻留在应用程序上下文中吗?或者它们应该属于“原型”范围
因此,与尝试将服务注入实体bean不同,您可能应该重新设计应用程序,以便从外部调用服务方法(可能通过某个门面),实体将通过查询填充,然后使用附加信息“丰富”,如果我们谈论的是选择查询,或者,一些信息应该预先设置在实体对象上,由业务逻辑层生成,只有这样实体对象才应该存储在DB中,您需要更改您的体系结构。实体不应该依赖于服务层。实体不是SpringBean,所以不能将任何SpringBean自动关联到实体中。用组件注释实体毫无意义。我曾尝试使用helper类获取RoleMappingService,在其中我编写了一个静态helper类,并通过该类尝试获取RoleMappingService对象,但仍然没有成功。同样,你不应该这样做。忘掉这个想法吧。使用来自服务的实体,而不是相反。您需要更改您的体系结构。实体不应该依赖于服务层。实体不是SpringBean,所以不能将任何SpringBean自动关联到实体中。用组件注释实体毫无意义。我曾尝试使用helper类获取RoleMappingService,在其中我编写了一个静态helper类,并通过该类尝试获取RoleMappingService对象,但仍然没有成功。同样,你不应该这样做。忘掉这个想法吧。使用服务中的实体,而不是相反。