我的数据模型中有一个继承。我有:
public class User(){
private String login;
private String password;
// accessors
}
我还有三个扩展User类的类:
public class Candidate() extends User{
// specific attributes and accessors
}
public class Recruiter() extends User{
// specific attributes and accessors
}
public class Administrator() extends User{
// specific attributes and accessors
}
我使用Spring数据JPA从数据库中获取数据。这是UserRepository的代码:
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findOneByActivationKey(String activationKey);
List<User> findAllByActivatedIsFalseAndCreatedDateBefore(DateTime dateTime);
Optional<User> findOneByEmail(String email);
Optional<User> findOneByLogin(String login);
void delete(User t);
}
当我的一个控制器出现问题时,我从数据库中获取数据并检查用户获取的实例是否为候选者:
String currentEmail = SecurityUtils.getCurrentEmail();
Optional<User> currentUser = userRepository.findOneByEmail(currentEmail);
if(currentUser.isPresent() && currentUser.get() instanceof Candidate){
((Candidate)currentUser.get() ).addLink(link);
}
在此代码中,currentUser.get()始终返回User,而不是Candidate,Recruiter或Administrator。 我不想使用candidateRepository或recruiterRepository发送另一个数据库请求来获取信息。 我哪里错了? 感谢