#java #sql #spring-boot #spring-security #spring-data-jpa
Вопрос:
У меня есть набор пользователей с разными типами ролей Маркетолог , Администратор, Генеральный менеджер. Когда учетная запись клиента зарегистрирована , в столбце отображается имя Маркетолога, назначенного Клиенту . Я создал отношения @ManyToOne и @OneToMany между пользователями и Клиентами. Когда маркетолог типа пользователя входит в программное обеспечение , я хочу, чтобы маркетолог видел только клиентов, зарегистрированных на имя маркетолога, вошедшего в систему. Это кажется сложным, потому что сначала мне нужно получить данные зарегистрированного маркетолога, используя имя пользователя, затем получить имя и фамилию, а затем отобразить список клиентов, назначенных этому имени.
Это организация-заказчик
@Entity @JsonIgnoreProperties({"hibernateLazyInitializer","handler"}) public class Customer implements Serializable { /** * */ private static final long serialVersionUID = 8348682056500740593L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String userName; private String password; private String firstName ; private String lastName; private String gender; private String Address; private String maritalStatus; private String category; private String motherMaidenName; private String idType; private String idNumber; private String phoneNumber; private String email; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date dateOfBirth; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date registrationDate; @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY ) @JoinColumn(name="marketer_id") private User marketer ; @JsonBackReference @OneToMany(mappedBy="customer_id",cascade = CascadeType.ALL, targetEntity=Investment.class) private List lt;Investmentgt; investment;
Это сущность пользователя
@Entity public class User { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String firstName ; private String lastName; private String username; private String password; private String Gender; private String phoneNumber; private String email; private String branch; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date createdDate; @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinTable( name = "users_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id") ) private Setlt;UserRolegt; userRole = new HashSetlt;gt;(); @Enumerated(EnumType.STRING) private UserStatus status; @JsonBackReference @OneToMany(mappedBy="marketer",cascade = CascadeType.ALL, targetEntity=Customer.class) private List lt;Customergt; customer;
This is the User Repository that contains a FindByUsername method that’s being used by JWT authentication manager
@Repository public interface UserAccountRepository extends JpaRepository lt;User, Longgt; { Optionallt;Usergt; findById(Long id); User findByUsername(String username); }
ОБНОВЛЕНО : Я получил пустой ответ на запрос , что я могу сделать не так ? Это обновленный класс контроллера клиента
@CrossOrigin(origins = {"http://localhost:3000"}) @RestController public class CustomerController { @Autowired CustomerAccountService customerRepo; @Autowired UserAccountService userRepo; @GetMapping(value="marketers/customers") public Listlt;Customergt; getLlistByMarketerName(){ Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); User loggedInUser =userRepo.findByUserName(authentication.getName()); System.out.println("logged in user:" loggedInUser); return customerRepo.findByMarketer(loggedInUser);
Я распечатал переменную loggedInUser, но она показывает значение null.
Ответ №1:
Ваша клиентская база должна легко справиться с этим:
public interface CustomerRepository extends JpaRepositorylt;Customer, Longgt; { Listlt;Customergt; findByMarketer(User marketer); }
Если вы хотите быть более откровенным и показать запрос:
public interface CustomerRepository extends JpaRepositorylt;Customer, Longgt; { @Query("select customer from Customer customer join customer.marketer marketer where marketer = :marketer") Listlt;Customergt; findByMarketer(User marketer); }
Переданным пользователем (маркетологом) является текущий пользователь, полученный из учетной записи пользователя.
Комментарии:
1. То, что я получил, — это пустой или пустой ответ