1

(3 відповідей, залишених у Інше)

Всім привіт. Тільки зареєструвався на AWS, тому тупе питання:
Пише що є 1 активний сервіс, коли заходжу в billing->bills(billing/home#/bills), то  в розділі Amazon Web Services EMEA SARL charges by service є Data Transfer(і нижче пише таке
$0.00 per GB - regional data transfer - in/out/between EC2 Azs or using elastic IPs or ELB) Хоча я ще нічого не робив, тим більше EC2 чи ELB, Через що це може бути і чи це нормально для нового акаунта? Дякую

2

(0 відповідей, залишених у Java)

Всім привіт, підскажіть, будь ласка, як замокати (і чи взагалі таке можливо) в тесті для контролера який має @PathVariable, Що я маю на увазі під контролером це

@GetMapping("/{id}")
@JsonView(Views.FullPublication.class)
public ResponseEntity<Publication> getPublicationById(@PathVariable("id") Publication publication) {
    return new ResponseEntity<>(publication, HttpStatus.OK);
}

і от як написати тест з MockMvc для цього контролера? Десь чув, що в такому випадку викликається метод getById репозиторія, але коли мокаю його, то нічого не міняється

3

(1 відповідей, залишених у Java)

Всім привіт, якщо репозиторів повертаж Optional, то сервіс повинен повертати то й ж Optional чи просто об'єкт, а якщо Optional пустий викидати помилку?
Толбто так:

public Author getAuthorById(int id) {
        return authorRepository.findById(id)
                .orElseThrow(() -> new AuthorNotFoundException("there are not author with id " + id));
    }

Чи так:

public Optional<Author> getAuthorById(int id) {
        return authorRepository.findById(id);
   }

4

(0 відповідей, залишених у Java)

Всім привіт, маю такі класи
Book:

@Data
@NoArgsConstructor
@Entity
@Table(name = "book")
@JsonIdentityInfo(
        property = "isbn",
        generator = ObjectIdGenerators.PropertyGenerator.class
)
public class Book {
    @Id
    @JsonView(Views.Id.class)
    private String isbn;

    @JsonView(Views.IdName.class)
    private String name;

    @Column(name = "date_of_publication")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    @JsonView(Views.FullBook.class)
    private LocalDate dateOfPublication;

    @JsonView(Views.FullBook.class)
    private Integer quantity;

    @JsonView(Views.FullBook.class)
    private String details;
    
    @OneToMany(mappedBy = "book")
    private List<ActiveBook> activeBooks;
    
    @ManyToOne
    @JoinColumn(name = "publication_id", referencedColumnName = "id")
    @JsonView(Views.FullBook.class)
    private Publication publication;

    @ManyToMany(fetch = FetchType.EAGER,cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "book_has_authors",
            joinColumns = @JoinColumn(name = "b_isbn",referencedColumnName = "isbn"),
            inverseJoinColumns = @JoinColumn(name = "a_id",referencedColumnName = "id"))
    @JsonView(Views.FullBook.class)
    private List<Author> authors;
}

Author:

@Data
@NoArgsConstructor
@Entity
@Table(name = "author")
public class Author {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonView(Views.Id.class)
    private int id;

    @JsonView(Views.IdName.class)
    private String name;

    @ManyToMany
    @JoinTable(name = "book_has_authors",
            joinColumns = @JoinColumn(name = "a_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "b_isbn", referencedColumnName = "isbn"))
    @JsonView(Views.FullAuthor.class)
    private List<Book> books;

}

Publication:

@Data
@NoArgsConstructor
@Entity
@Table(name="publication")
public class Publication {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonView(Views.Id.class)
    private int id;

    @JsonView(Views.IdName.class)
    private String name;

    @OneToMany(mappedBy = "publication")
    @JsonView(Views.FullPublication.class)
    private List<Book> books;

}

BookRepository:

@Repository
public interface BookRepository extends JpaRepository<Book, String> {
    @EntityGraph(attributePaths = {"authors"})
    Page<Book> findAll(Pageable pageable);
}

Але всерівно виконюється запит для кожної publication, як це можна пофіксити? Знаю, що якщо напишу 2 left join fetch, то спрінг буде сваритися. Але ж publication це одна сутність і по поєму розумінні, так як fetch type = eager, то воно б мало зразу робити запит і для publication. буду радий почути розумні думки і поради, і якщо я помиляюся, то підправте, дякую.
Якщо когось цікавить hibernate запити які викликаються, то ось:

Hibernate: 
    select
        b1_0.isbn,
        a1_0.b_isbn,
        a1_1.id,
        a1_1.name,
        b1_0.date_of_publication,
        b1_0.details,
        b1_0.name,
        b1_0.publication_id,
        b1_0.quantity 
    from
        book b1_0 
    left join
        (book_has_authors a1_0 
    join
        author a1_1 
            on a1_1.id=a1_0.a_id) 
                on b1_0.isbn=a1_0.b_isbn
Hibernate: 
    select
        p1_0.id,
        p1_0.name 
    from
        publication p1_0 
    where
        p1_0.id=?
Hibernate: 
    select
        p1_0.id,
        p1_0.name 
    from
        publication p1_0 
    where
        p1_0.id=?
Hibernate: 
    select
        p1_0.id,
        p1_0.name 
    from
        publication p1_0 
    where
        p1_0.id=?
Hibernate: 
    select
        p1_0.id,
        p1_0.name 
    from
        publication p1_0 
    where
        p1_0.id=?

5

(0 відповідей, залишених у Java)

Всім привіт, маю такий метод контроллера:

@PostMapping()
    public ResponseEntity<BookDTO> saveBook(@RequestBody @Valid BookDTO book, BindingResult bindingResult) {
        bookValidator.validate(book, bindingResult);
        if (bindingResult.hasErrors()) throw new BookNotSavedException(bindingResult.getFieldErrors().toString());
        Book savedBook = bookService.saveBook(convertToBook(book));
        return new ResponseEntity<>(convertToBookDTO(savedBook), HttpStatus.OK);
    }

сам метод validate bookValidator такий:

public void validate(Object target, Errors errors) {
        BookDTO book = (BookDTO) target;
        if (bookService.getBookByIsbn(book.getIsbn()).isPresent())
            errors.rejectValue("isbn", "", "Book with isbn " + book.getIsbn() + " already exist");

    }

Як написати тест, який би перевіряв коли книжка вже існує і зайшов в блок if(bindingResult.hasErrors()).Знаю, що bindingResult не можна мокати, то який є ще варіант? Дякую

6

(2 відповідей, залишених у Java)

Всім привіт, підскжіть книгу(або будь-який інший ресурс), яка підійде для підкріплення знань з java core, не базовий рівень, дякую

7

(0 відповідей, залишених у Java)

Всім привіт. Якщо робимо звязок багато до багатьох, то використовуємо анотацію @ManyToMany, тоді не створюємо клас для зв'язувальної таблиці. Тому питання: як можна отримати всі записи з зв'язувальної таблиці? Розумію, що можна написати нативний запит, але думаю має бути кращий спосіб. Чи просто робити клас для зв'язувальної таблиці і тоді використовувати анотації @ManyToOne і @OneToMany?Дякую

8

(1 відповідей, залишених у Java)

Всім привіт, пробую в imageView засунути Image, який беру з byte[], а його з бази, код наступний

byte[] photo = book.getPhoto();
ByteArrayInputStream inputStream = new ByteArrayInputStream(photo);
Image image = new Image(inputStream);

// Встановити зображення у ImageView
imageView.setImage(image);

Але нічого не відображається, в чому може бути проблема(байти точно приходять)

9

(0 відповідей, залишених у Java)

Всім привіт, чи можна якось зробити, щоб в контроллері, параметер @AuthenticationPrincipal був не OAuth2User, а мій клас User
Колись знаю мождна було це зробити за допомогою PrincipalExtractor та анотації @EnableOAuth2Sso. Чи є якась зараз заміна цього, дякую!

10

(2 відповідей, залишених у Бази даних)

Трошки не це, але дякую. Почитав ще і скоріше за все нічого подібного в java нема(

Всім привіт, є лабораторна робота, де потрібно взаємодіяти з базою в з'єднаному та роз'єднаному режимах. Читав, що на c# є відповідні класи для роз'єднаного, такі як SqlDataAdapter, DataSet. Так от питання, чи є якісь альтернативи цих класів на java? Чи можна вважати, що на java я буду працювати в з'єднаному режимі, якщо дістану 1 конекшин і всі запити буду робити через нього, а в роз'єднаному, якщо буду діставати новий конекшин для кожного запиту? Чи як взагалі не реалізується на java? Заздалегідь дякую.

12

(2 відповідей, залишених у Java)

Всім привіт, роблю простий проект на spring, потрібно щоб користувач реєструвався тому в UserDTO я додав поле password, але от при отримані користувача(get метод) я не хочу, щоб виводився пароль(хоч він і зашифрований). Так от питання, як це зробити. Можливо просто в методі сервіса, після того як я отримую користувача присвоїти його паролю пусту стрічку, але звучить як костиль. Буду радий кожному коментарі або статті, дякую

13

(2 відповідей, залишених у HTML та CSS)

Всім привіт, пишу пет проект на java і маю невеличкий js код для виклику спливаючого вікна, кодування і в jsp файлі стоїть <%@ page contentType="text/html;charset=UTF-8" %>, але чомусь всерівно виводить крокозябри, буду радий, якщо підскажете в чому може бути помилка

const badPopup = document.createElement('div');
badPopup.innerHTML = `Наразі немає в наявності цієї книги `;
badPopup.style.position = 'fixed';
badPopup.style.bottom = '20px';
badPopup.style.right = '-300px';
badPopup.style.padding = '20px';
badPopup.style.backgroundColor = '#f63434';
badPopup.style.border = '1px solid black';
badPopup.style.zIndex = '9999';


body.appendChild(badPopup);

setTimeout(function () {
    badPopup.style.transition = "all 1s ease-in-out";
    badPopup.style.right = "70px";
}, 300);
setTimeout(function () {
    badPopup.style.transition = "all 1s ease-in-out";
    badPopup.style.right = "-300px";
}, 3000);
setTimeout(function () {
    badPopup.remove();
}, 5000);

Якщо маєте поради для поправки коду також буду вдячний.

14

(4 відповідей, залишених у Java)

так, саме java

15

(4 відповідей, залишених у Java)

Не все все-таки вирішив. Вертаючись до сортування та пошуку, при переході на наступну сторінку для пагінації всі ці настройки пошуку та сортування скидаються, єдине, що я придумав, це передавати їх всіх(href="controller/action=getBooks&page=${page+1}&orderOption=${orderOption}&sortOption=${sortOption}..."). Чи може хтось підсказати більш правельне рішення, буду дуже вдячним, дякую.

16

(4 відповідей, залишених у Java)

Все вирішилося, я сам собі придумав проблеми

17

(4 відповідей, залишених у Java)

Всім привіт, підскажіть, будь ласка. Розроюляю пет проект про бібліотеку, книги звязані з авторами звязком багато до багатьох, при переході на сторінку, де відображаютсья всі книги є можливість пошуку за автором та назвою книги, а також сортування за назвою автора або книги, пошук я реалізував як sql запит, а от сортував просто колекції, які отримував на основі саме цього запиту, зараз реалізовую пагінацію і розумію, що вона в такому випадку не зовсім правильна, адже якщо я отримую лише, до прикладу 1 сторінку на якій 3 записи, то буду сортувати лише ці 3 записи, а не всі. Робив я сортування саме колекцій, а не order by через те, що при пошуку за назвою книги і пошуком за назвою автора виходять різні запити а + при сортуванні ще 2, в результаті виходить 8 різних запитів (сортування за зростанням/спаданням за автором/назвою при пошуку за автором/назвою). Так ось питання, чи норм, що буде 8 запитів лише на вибірку книг і тоді в такому випадку реалізовувати пагінацію в sql, чи якось реалізовувати пагінацію саме колекцій, хоче це, як на мій початковий розум, не дуже і зручно?

18

(1 відповідей, залишених у Java)

Всім привіт, допоможіть, будь ласка. Розробляю бібліотеку(пет проект) і при додаванні нової книжки потрібно якось звязати її з авторами, книжка може мати будь-яку кількість авторів і ось тут питання, як це краще вводити на jsp сторінці? Єдине, що приходить в голову, це робити input number і там вводиться кількість авторів і тоді на сторінці виводиться така кількість select для авторів(для кожного автора свій select). Можливо є краще рішення, буду радий почути

19

(2 відповідей, залишених у Java)

Всім привіт, підскажіть, будь ласка, як правильніше зробити
в базі даних є таблиця книжки, потрібно дозволити користувачу шукати та сортувати книжки, так от питання:
краще витягувати з бази в лист і тоді сортувати або відбирати лише потрібні, чи краще робити запит з order by і повертати з бази тільки потрібні книжки?

20

(1 відповідей, залишених у *nix)

Всі привіт, поставив на virtualBox kali linux. Для універу треба, та й самому цікаво, що можна на цій операційній системі цікавого зробити (я розумію, що на ній можна робити дуже багато цікавого, але порекомендуйте, будь ласка, що можна цікаве та не складне показати на всю аудиторію, просто пару базових прикладів), або поділіться сайтом, або відео, де коротко розповідається про цікавинки kali linux, дякую.