Hibernate 如何在双向@OneToMany@ManyToOne关系中禁用抓取。弹簧数据

Hibernate 如何在双向@OneToMany@ManyToOne关系中禁用抓取。弹簧数据,hibernate,spring-data-jpa,lazy-loading,parent-child,Hibernate,Spring Data Jpa,Lazy Loading,Parent Child,请帮助我找到一种方法,在双向父子关系中获取父@实体,而不使用它的子@实体。非常感谢。 父实体(没有几个不重要的字段): 据我所知,答案是你不能。休眠映射 按实体,因此始终具有整个子对象 我不知道你想做什么,但我认为你应该得到 然后修改整个子列表对象(可能通过stream.map()进行修改) 函数)以成为所需的列表childId 对只能获取父级的can方法使用can本机查询,而不是Hibernate内置方法,因为它们在内部根据您的映射触发查询(独立于惰性和急切加载) -如果您想知道当前内部触

请帮助我找到一种方法,在双向父子关系中获取父@实体,而不使用它的子@实体。非常感谢。 父实体(没有几个不重要的字段):

  • 据我所知,答案是你不能。休眠映射 按实体,因此始终具有整个子对象
  • 我不知道你想做什么,但我认为你应该得到 然后修改整个子列表对象(可能通过stream.map()进行修改) 函数)以成为所需的列表childId
  • 对只能获取父级的can方法使用can本机查询,而不是Hibernate内置方法,因为它们在内部根据您的映射触发查询(独立于惰性和急切加载)
-如果您想知道当前内部触发的查询是什么,您可以在aplication.properties中使用

spring.jpa.show-sql=true

希望这个答案能对你有所帮助。

不确定你到底想禁用什么,但我猜你看到了一个额外的选择来获取优惠券?在这种情况下,您应该在
@OneToMany
上使用
EAGER
,或者使用实体图来指定优惠券集合应该联合获取。

谢谢,IshanI认为fetchType=LAZY在这种情况下应该有所帮助。它不起作用,因为它与“一方”的mappedBy atribute的关系是双向的?欢迎@AdamSidorovichThank you Christian。最后,我避免在公司类中使用@EntityGraph和@JsonIgnoreProperties(“优惠券”)。现在当我拿到公司时,我不会收到公司优惠券。我希望此解决方案不会影响性能
@Entity
@Table(name = "COUPONS", indexes = @Index(name = "TitleIndex", columnList = "COMPANY_ID, TITLE", unique = true))
@AllArgsConstructor
@NoArgsConstructor
@Lazy
@Builder
public class Coupon {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "increment")
    @Column(nullable = false, name = "ID", updatable = false)
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "COMPANY_ID", nullable = false)
    @JsonBackReference
    private Company company;

    @Column(nullable = false, length = 100, name = "TITLE")
    private String title;

    @OneToMany(mappedBy = "coupon", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    @JsonManagedReference
    private List<Purchase> purchase = new ArrayList<>();
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jb</groupId>
<artifactId>coupons3web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>coupons3web</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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>
{"id":2,"name":"Facebook","email":"k3","password":"$2a$10$WHBxW62w07mNcT8UcaiPw.MmAB/TjbIjcTM2fcmIiCjri5ac59ba.","coupons":[{"id":1,"title":"Travel","description":"RK49NZi3L7","startDate":"2021-05-27","endDate":"2021-06-17","amount":3400,"price":163.55,"image":"qq3eUAJx0CnxnOtkv2HB","purchase":[{"id":{"couponID":1,"customerID":2}},{"id":{"couponID":1,"customerID":5}},{"id":{"couponID":1,"customerID":6}},{"id":{"couponID":1,"customerID":12}},{"id":{"couponID":1,"customerID":16}},{"id":{"couponID":1,"customerID":19}}]}]}
spring.jpa.show-sql=true