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内置方法,因为它们在内部根据您的映射触发查询(独立于惰性和急切加载)
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