클래스 org.hibernate.proxy.pojo.bytebuddy의 시리얼라이저를 찾을 수 없습니다.바이트 버디가로채기
엔드포인트로 이동하려고 하면 다음 오류가 발생합니다.
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)
모든 모델을 확인해보니 모든 속성에는 getter와 setter가 있습니다.그래서 뭐가 문제야?
는 그것을 하려면 , 「더하다」를 붙여야 .spring.jackson.serialization.fail-on-empty-beans=false
이건 예외를 감추기 위한 작업이라고 생각합니다.
편집
Product
표시:
@Entity
public class Product {
private int id;
private String name;
private String photo;
private double price;
private int quantity;
private Double rating;
private Provider provider;
private String description;
private List<Category> categories = new ArrayList<>();
private List<Photo> photos = new ArrayList<>();
// Getters & Setters
}
PagedResponse
:::
public class PagedResponse<T> {
private List<T> content;
private int page;
private int size;
private long totalElements;
private int totalPages;
private boolean last;
// Getters & Setters
}
RestResponse
래래 :
public class RestResponse<T> {
private String status;
private int code;
private String message;
private T result;
// Getters & Setters
}
내 컨트롤러로 돌아가는 중
스프링 저장소를 사용하여 튜토리얼을 진행하다가 이 오류를 발견했습니다.이 오류는 우리 회사의 서비스 클래스를 구축하는 단계에서 발생한 것으로 판명되었습니다.
serviceImpl 클래스에는 다음과 같은 것이 있습니다.
@Override
public YourEntityClass findYourEntityClassById(Long id) {
return YourEntityClassRepositorie.getOne(id);
}
변경 내용:
@Override
public YourEntityClass findYourEntityClassById(Long id) {
return YourEntityClassRepositorie.findById(id).get();
}
기본적으로 getOne은 느린 로드 조작입니다.따라서 엔티티에 대한 참조(프록시)만 얻을 수 있습니다.즉, 실제로 DB 액세스가 수행되지 않습니다.해당 속성을 호출해야만 DB에 대한 쿼리를 수행합니다. findBindByID는 콜을 호출하면 즉시 콜을 실행하므로 실제 엔티티가 완전히 채워집니다.
여기를 봐주세요.get One과 find By의 차이점 링크아이디
Ignore를 사용하여 속성의 JSON 출력을 생성할 수 있습니다.
@JsonIgnore
또는 관계를 맺고 있는 게으른 로딩 속성이 있는 경우.이 주석은 특성 맨 위에서 사용할 수 있습니다.
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
예:
@Entity
public class Product implements Serializable{
private int id;
private String name;
private String photo;
private double price;
private int quantity;
private Double rating;
private Provider provider;
private String description;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private List<Category> categories = new ArrayList<>();
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private List<Photo> photos = new ArrayList<>();
// Getters & Setters
}
그래도 이 오류가 발생할 경우 application.properties 파일에 이 코드 행을 추가하십시오.
spring.jackson.serialization.fail-on-empty-beans=false
당신의 문제가 해결되길 바랍니다.감사해요.
FetchType을 게으름뱅이에서 열정으로 바꾸면 효과가 있었습니다.
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
아주 잘 해 주셨으면 좋겠습니다.참조 개체가 누락되지 않고 문제가 해결됩니다.
내 경우:
@Entity
@Table(name = "applications")
public class Application implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotBlank
@Size(max = 36, min = 36)
private String guid;
@NotBlank
@Size(max = 60)
private String name;
@Column(name = "refresh_delay")
private int refreshDelay;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "id_production", referencedColumnName = "id")
@JsonIgnoreProperties(value = {"applications", "hibernateLazyInitializer"})
private Production production;
이 답변은 "스프링 부트로 마이크로 서비스 학습"이라는 책에서 나온 것입니다.봄에 의해 제안된 빈 빈 콩의 오류를 억제하는 대신 이를 처리하는 더 바람직한 방법이 있습니다.
중첩된 사용자 엔티티를 LAGY 모드로 가져오도록 구성했기 때문에 데이터베이스에서 쿼리되지 않습니다.또한 Hibernate는 런타임에 클래스용 프록시를 만듭니다.그게 바이트버디의 배경이야인터셉터 클래스가져오기 모드를 OVER로 전환하면 이 오류가 더 이상 발생하지 않습니다.그러나 이는 이 문제에 대한 적절한 해결책이 아닙니다. 그 이후로 불필요한 데이터에 대한 많은 쿼리가 트리거되기 때문입니다.lazy fetch 모드를 유지하여 적절히 수정합시다.첫 번째 옵션은 JSON 시리얼화를 커스터마이즈하여 휴지 상태의 오브젝트를 처리할 수 있도록 하는 것입니다.다행히 잭슨 라이브러리의 프로바이더인 FasterXML은 ObjectMapper 오브젝트에서 사용할 수 있는 휴지 상태용 특정 모듈(jackson-datatype-hibernate:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
</dependency>
잭슨을 위해 새로운 하이버네이트 모듈용 콩을 만듭니다.Spring Boot의 Jackson2ObjectMapperBuilder는 자동 구성을 통해 이 기능을 사용하며, 모든 ObjectMapper 인스턴스는 Spring Boot 기본값과 자체 커스터마이즈를 사용합니다.
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JsonConfiguration {
@Bean
public Module hibernateModule() {
return new Hibernate5Module();
}
}
이것으로 내 문제는 해결되었다.
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
나도 같은 문제에 직면했다.repo.getOne(id)를 사용하다가 repo.findById(id)로 변경했습니다.옵션에서 반환되었지만 오류가 사라졌습니다.
저도 이 문제에 직면했어요.@젤렉의 대답이 도움이 됐다.하지만 난 다른 방법으로 했어.getOne() 메서드가 다음으로 변경되었습니다.
repository.findById(id).orElse(null)
고객님이 고객님의NullPointerException
찾을 수 없을 때 생성됩니다.
에서 변경하다
MyEntityClassRepositorie.getOne(id)
로.
MyEntityClassRepositorie.findById(id).get()
잘 될 것 같아요.
jvm의 한 인스턴스에서 다른 인스턴스로 엔티티를 전송하기 위해 트레이를 하고 있습니까?이 경우 엔티티를 가져와 시리얼화 할 수 없는 클래스를 사용하여 휴지 상태가 된 경우 엔티티를 pojo로 변환해야 합니다(즉, 시리얼화 가능한 네이티브 타입 또는 오브젝트를 사용).
저는 DTO 오브젝트에 대해 이 에러를 받았습니다.문제는 DTO 속성을 위한 getter를 제공하지 않았다는 것입니다.따라서 잭슨은 이러한 값을 가져올 수 없었고 빈이 비어 있다고 가정했습니다.솔루션:
DTO에 Getter 추가
내 경우, 나는 같은 예외에 직면했다.@EntityGraph
사실 EntityGraph를 통해 OneToMany(InventoryList)를 가져오려고 했는데 동작하고 있었는데 ManyToOne(카테고리)와 다른 관계를 시도해보니 오류가 발생하였습니다.왜 게을러졌는지 모르겠어요.아시다시피@ManyToOne
는 기본적으로 열심입니다.
class Product {
@ManyToOne
@JoinColumn(name = "categoryId")
private Category category;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
private List<Inventory> inventoryList;
}
저장소 방법:
@EntityGraph(attributePaths = { "inventoryList" })
List<Product> findAll();
EntityGraph fetch에 카테고리를 추가하지 않았기 때문에 동일한 검사를 받았습니다.카테고리를 추가하면 수정됩니다.
@EntityGraph(attributePaths = { "inventoryList", "category" })
List<Product> findAll();
localhost에서 작업하기 때문에 서버가 필요했습니다.다음은 나에게 효과가 있었다.
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>9.0.65</version>
</dependency>
언급URL : https://stackoverflow.com/questions/52656517/no-serializer-found-for-class-org-hibernate-proxy-pojo-bytebuddy-bytebuddyinterc
'programing' 카테고리의 다른 글
데이터베이스 테이블을 대량의 테스트 데이터로 채우다 (0) | 2022.12.29 |
---|---|
MySQL - 액세스 권한 부여가 작동하지 않음 (0) | 2022.12.29 |
과학적 표기법을 사용하지 않고 정확하게 NumPy 배열 인쇄 (0) | 2022.12.09 |
MySQL/MariaDB에서 명시적으로 쿼리되는 컬럼을 찾을 수 있습니까? (0) | 2022.12.09 |
디렉토리에 있는 각 파일의 루프 코드 (0) | 2022.12.09 |