Я называю свои DAO (DataAccessObjects) "Хранилища".
Spring Data JPA также делает это.
Итак, я бы создал UserRepository и PaymentRepository.
Хранилища могут вызываться другими хранилищами или службами.
Службы никогда не должны вызывать хранилища.
UI -> Сервис -> Репозиторий.
Ваш платежный репозиторий может вернуть сущность, подобную этой
public class PaymentEntity{
private long id;
private DateTime dateTime;
private UserEntity user;
}
Ваш UserRepository может вернуть сущность, подобную этой
public class UserEntity{
private long id;
private DateTime lastLogin;
private List<PaymentEntity> payments;
}
Ваши хранилища могут выглядеть следующим образом.
public interface PaymentRepository{
PaymentEntity getPaymentById(long id);
List<PaymentEntity> getAllPayments();
}
public interface UserRepository{
UserEntity getUserById(long id);
List<UserEntity> getAllUsers();
}
Таким образом, ваш PaymentRepository будет вызывать UserRepository, чтобы получить пользователя для вашего платежа.
И ваш UserRepository будет вызывать PaymentRepository, чтобы получать платежи всех пользователей
Я надеюсь, что смог вам помочь