Spring Data JPA Intelligence не работает в Intellij для отношения OneToMany

#spring-boot #intellij-idea #spring-data-jpa

#spring-загрузка #intellij-идея #spring-data-jpa

Вопрос:

Я настроил новый проект spring boot с Spring Data JPA и хотел бы использовать функцию автозаполнения для поиска всех записей по вложенному свойству.

подсказка intellij для метода репозитория не содержит вложенных свойств

Я хочу получить клиентов, у которых есть соответствующие почтовые индексы. Объявленные сущности:

 @Entity
@Getter
public class Customer {
    @Id
    private long id;
    private String firstName;
    @OneToMany(targetEntity = Address.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Address> addresses;
}


@Entity
@Getter
public class Address {

    @Id
    private long id;
    private String streetName;
    private String zipCode;

}
 

Это должно работать из коробки, как в статье здесь: https://evonsdesigns.medium.com/spring-jpa-one-to-many-query-examples-281078bc457b

но это не работает. Я попробовал это со следующей конфигурацией pom:

     <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.7</version>
            <relativePath/>
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>11</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>javax.persistence-api</artifactId>
                <version>2.2</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
 

Пробовал на IntelliJ IDEA 2021.3 (Ultimate Edition)

Комментарии:

1. Я действительно не понимаю вашего вопроса. Если вы хотите получить данные из базы данных, вы должны запросить свою базу данных. есть несколько способов сделать это. Вы можете использовать интерфейс, который наследует CrudRepository или JpaRepository. При написании подписи вашего метода репозитория (например, findByZipCode) IntelliJ поможет вам с его автозаполнением.

2. Вы проверили прикрепленный скриншот? IntelliJ не помогает при написании метода, использующего свойство вложенной сущности. Я создал проблему youtrack.jetbrains.com/issue/IDEA-284683

3. Вы пытались решить это в SQL раньше? Like SELECT c.id FROM customers c WHERE c.address_id IN (SELECT a.id FROM addresses a WHERE a.zipCode = '12345') сначала ищет (1) адреса, которые совместно используют данный почтовый индекс, затем (2) для всех клиентов, которые принадлежат этим адресам.