[SPRING] 봄 부팅에 TransientPropertyValueException
SPRING봄 부팅에 TransientPropertyValueException
나는 LoginCredential 클래스가 있습니다 :
@Data
@Entity
public class LoginCredential implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long userID;
String eMail;
String passwordHash;
@GeneratedValue(strategy = GenerationType.AUTO)
@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
User user;
}
그리고 여기 내 사용자 클래스입니다 :
@Data
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long userID;
@OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
@JoinColumn(name = "userID",referencedColumnName = "userID")
private LoginCredential loginCredential;
}
그리고 내 LoginCredentialController의 POST-ING 방법은 간단하다 :
@PostMapping("/login")
LoginCredential newLoginCredential(@RequestBody LoginCredential newLoginCredential) {
logger.debug(newLoginCredential);
LoginCredential a=repository.save(newLoginCredential);
logger.debug(a);
return a;
}
지금은이 명령을 시도 할 때 : -X POST 컬 -H "콘텐츠 형식 : 응용 프로그램 / JSON"-d "{\"이메일 \ "\"1 \ "}": // localhost를 : 8080 / 로그인 HTTP를
나는, 오류없이 LoginCredential을 얻을 언급되는 사용자 필드는 null입니다.
-d :이 명령 컬 -X POST -H "응용 프로그램 / JSON 콘텐츠 형식"시도 이유입니다 "{\"이메일 \ 1 \ "\"를 ", \"사용자 \ ": {}}에"http : / / 로컬 호스트 : 8080 / 로그인
어느 날 오류 속담을 제공합니다 :
Application.properties
pom.hml
해결법
-
==============================
1.세 가지 문제가
세 가지 문제가
아래로 엔티티를 변경해야하는 모든 문제를 해결하려면 (나는 또한 어떤 쓸모 주석과 값을 제거)
@Data @Entity public class User { @Id Long userID; @JsonBackReference @MapsId @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "userID", referencedColumnName = "userID") @ToString.Exclude private LoginCredential loginCredential; }
과
@Data @Entity public class LoginCredential { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long userID; String eMail; String passwordHash; @JsonManagedReference @OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) private User user; }
또한 엔드 포인트를 완료하기 전에 관계의 양쪽을 설정해야합니다;
Optional.ofNullable(loginCredential.getUser()) .ifPresent(user -> user.setLoginCredential(loginCredential)); loginCredentialRepo.save(loginCredential);
-
==============================
2.당신은 사용자 개체에 대한 @GeneratedValue 필요하지 않습니다
당신은 사용자 개체에 대한 @GeneratedValue 필요하지 않습니다
OneToOne에 대한 CascadeType 추가
이렇게함으로써 당신은 LoginCredential을 저장할 때 데이터베이스에 사용자를 저장 최대 절전 모드 말한다.
@Data @Entity public class LoginCredential implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long userID; String eMail; String passwordHash; @OneToOne(cascade = {CascadeType.ALL}, mappedBy = "loginCredential", fetch = FetchType.LAZY) User user; }
자세한 내용은이를 참조하십시오
-
==============================
3.뿐만 아니라 직렬화 사용자 클래스를 확인합니다.
뿐만 아니라 직렬화 사용자 클래스를 확인합니다.
from https://stackoverflow.com/questions/58229715/transientpropertyvalueexception-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 @SessionAttribute 어떻게 동일한 컨트롤러에서 세션 개체를 검색합니다 (0) | 2019.10.17 |
---|---|
[SPRING] 일반 JSON 봄 데이터 REST (안 HAL 형식) (0) | 2019.10.17 |
[SPRING] + @Transactional 주위에 사용자 정의 스프링 AOP (0) | 2019.10.17 |
[SPRING] 봄 부팅 1.4 잭슨을 사용자 지정하는 방법 (0) | 2019.10.17 |
[SPRING] 비 스프링 구성 요소에 대한 스프링 AOP (0) | 2019.10.17 |