Метод save() не принимает ArraysList элементов?

103
24 декабря 2021, 15:30

Используя одну из старых версий spring-data-jpa 1.11.9.RELEASE столкнулся с непонятным моментом с Generics

у меня есть spring repository

@Repository
public interface UserRepository extends CrudRepository<UserRecord, String> {}

Записываю так и все работает:

UserRecord user = new UserRecord ();
userRepository.save(user);

Но вижу, что помимо одиночной сущности, Репозиторий содержит так же метод с такой сигнатурой

<S extends T> Iterable<S> save(Iterable<S> entities);

Поэтому я решил записывать сразу всю коллекцию своих элементов вместо записи по очереди

        Iterable<UserRecord> list = new ArrayList<>();
        userRepository.save(list);

Но, идея мне подчеркивает такое использование красным как неправильное со словами

Incompatible types. Required UserRecord but 'save' was inferred to Iterable: no instance(s) of type variable(s) S exist so that Iterable conforms to UserRecord

Как записать коллекцию элементов разом?

Answer 1

У меня все скомпилировалось. Сравните с вашей реализацией.

UserRepository:

package ru.abelash.stackoverflow;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends CrudRepository<UserRecord, String> {}

UserRecord:

package ru.abelash.stackoverflow;
public class UserRecord {}

Test:

package ru.abelash.stackoverflow;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.ArrayList;
public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        UserRepository userRepository = context.getBean(UserRepository.class);
        UserRecord user = new UserRecord();
        userRepository.save(user);
        Iterable<UserRecord> list = new ArrayList<>();
        userRepository.save(list);
    }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ru.abelash</groupId>
    <artifactId>stackoverflow</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.9.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Структура проекта:

READ ALSO
Как вставить собственный класс в БД

Как вставить собственный класс в БД

Написал свой класс в postgres

90
Не работает JMenu

Не работает JMenu

Я решил создать JMenuЯ полазил в настройках, все сделал, но когда я нажимаю на меню оно не работает

91
Запись цифр числа в массив

Запись цифр числа в массив

Задание: записать число N в массив наоборотНапример:

79