java - FetchType.LAZY 不适用于 hibernate 中的 @ManyToOne 映射

标签 java hibernate persistence lazy-loading many-to-one

简单地说,我的 Child 类与 Parent 类之间存在多对一的关系。我想加载所有的 child ,而不必加载他们的 parent 详细信息。 我的 child 类(class)是

@Entity

public class Child implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parentId", referencedColumnName = "id")
private Parent parent;

public Child() {
}
// Getters and setters here
}

我的父类是

@Entity
public class Parent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

public Parent() {
}
}

我有一个休息 Controller ,我想用它来获取所有没有 parent 的 child

@GetMapping
public List<Child> getChildren() {
    return childRepository.findAll();
}

当我运行它时它会抛出

 {
  "timestamp": "2019-02-22T13:45:31.219+0000",
  "status": 500,
  "error": "Internal Server Error",
  "message": "Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->com.example.attendance.models.Child[\"parent\"]->com.example.attendance.models.Parent$HibernateProxy$1QzJfFPz[\"hibernateLazyInitializer\"])",
  "trace": "org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->com.example.attendance.models.Child[\"parent\"]->com.example.attendance.models.Parent$HibernateProxy$1QzJfFPz[\"hibernateLazyInitializer\"])\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:293)\n\tat org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:103)\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:180)

我需要更改什么才能延迟加载父类?

提前致谢。

最佳答案

您已经延迟加载父类。发生异常是因为您在加载父对象之前序列化了子对象。要禁用它,您可以用以下注释您的 Child 类: @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

之后,父级将在序列化中被忽略。

关于java - FetchType.LAZY 不适用于 hibernate 中的 @ManyToOne 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828498/

相关文章:

perl - 如何实现不涉及加载到内存的对象持久化?

java - 如何在 Android 中全局声明一个资源

java - 我做错了什么,hibernate/spring Boot 显示来自 mysql 的名称

java - 从 Spring 2.5.6 升级到 3.2.6 导致 Spring Transaction Management 不再适用于 JBoss 5.1.0 和 Hibernate 3.5.6

java - Hibernate 中多个表之间的复合 id

java - Tomcat 部署中与 Spring 持久性相关的错误

javascript - 浏览器中的持久存储

java - 如何在服务器端为使用 Grails 和 CXF 发布的 Web 服务启用 MTOM?

java - 打印枚举期间二元运算符 '+' 的操作数类型错误

java - 如何使用 smack(java) 创建、发送和接收 iq 数据包