[SPRING] Spring 데이터 JDBC : DataRetrievalFailureException : [oracle.sql.ROWID]를 [java.lang.Number]로 캐스팅 할 수 없습니다.
SPRINGSpring 데이터 JDBC : DataRetrievalFailureException : [oracle.sql.ROWID]를 [java.lang.Number]로 캐스팅 할 수 없습니다.
나는 Spring Data JDBC를 처음 사용하고 있으며, 간단한 Dto를 생성하고 DB에 저장하도록 고심하고있다.
나는 Spring-Boot 2.1.1.RELEASE와 Oracle 12 Database를 사용하고있다.
UserDto
@Table(value="USERS_T")
public class UserDto extends PersistableDto {
@Id
@Column(value="USR_USERNAME")
private String userName;
@Column(value="USR_FIRSTNAME")
private String firstName;
@Column(value="USR_LASTNAME")
private String lastName;
.....
}
UserDao
@Repository
public interface UserDao extends CrudRepository<UserDto, String> {
@Query("SELECT * FROM USERS_T u WHERE u.USR_USERNAME = :userName")
UserDto findByUserName(@Param("userName") String userName);
}
나는 이걸 DB에서 그대로 유지하려고 노력하고있다.
public String createUser() {
UserDto userDto = new UserDto().setUserName("mapss@sapot.wrong.email.pt").setPassword("superpass").setUserType("Guest").setActive(true);
logger.info(String.format("Creating user: " + userDto));
userDto.setNew(true);
UserDto persistedUser = userDao.save(userDto);
logger.info(String.format("Persisted user: " + persistedUser));
return "Ending of create user operation";
}
이 예외가 발생합니다.
org.springframework.dao.DataRetrievalFailureException: The generated key is not of a supported numeric type. Unable to cast [oracle.sql.ROWID] to [java.lang.Number]
at org.springframework.jdbc.support.GeneratedKeyHolder.getKey(GeneratedKeyHolder.java:79) ~[spring-jdbc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.data.jdbc.core.DefaultDataAccessStrategy.getIdFromHolder(DefaultDataAccessStrategy.java:323) ~[spring-data-jdbc-1.0.3.RELEASE.jar:1.0.3.RELEASE]
나는 이것이 어떻게 든 @Id가 String이라는 사실과 관련이 있다고 믿는다.
누군가 내가 뭘 잘못하고 있는지 이해하도록 도와 줄 수 있습니까? 왜이 행동. 나는 이드의 유형에 대한 제한과 제한을 보지 못했다. Oracle과 Oracle의 통합 문제입니까? 이 문제를 어떻게 해결할 수 있습니까?
도와 주셔서 감사합니다.
해결법
-
==============================
1.불행히도 오라클은 아직 완전히 지원되지 않습니다. 오라클에 대한 통합 테스트를 작성하는 데 문제가 있으며 관련 PR은 이미 일부 문제를 수정하고 있지만 모든 문제는 해결하지 않았습니다.
불행히도 오라클은 아직 완전히 지원되지 않습니다. 오라클에 대한 통합 테스트를 작성하는 데 문제가 있으며 관련 PR은 이미 일부 문제를 수정하고 있지만 모든 문제는 해결하지 않았습니다.
주요 문제는 오라클이 생성 된 키 생성과 관련하여 흥미로운 부분을 수행한다는 것입니다. 다음과 같은 옵션이 있습니다.
a) 데이터베이스 측에서 키 생성을 사용하지 마십시오. DATAJDBC-282를 사용하면이 작업을보다 편리하게 수행 할 수 있습니다. 그러나 그것은 SNAPSHOT 릴리스에서만 지금까지입니다.
b) 오라클을 사용하지 마십시오. 현재 MySql, Postgres, H2, HSQLDB 및 MariaDb로 테스트하고 있습니다.
c) 위에서 언급 한 PR을보고 충분히 일을 패치 할 수 있는지 확인하십시오.
나는이 옵션들이 만족스럽지 않다는 것을 알고 있습니다. 문제는 오픈 소스 프로젝트가 Oracle과의 통합 테스트를 수행하는 것이 매우 어렵다는 것입니다. 공개 CI 빌드에서 합법적 인 Oracle JDBC 드라이버를 다운로드하는 것조차도 데이터베이스가 아닌 악몽입니다.
동료가 상황을 논의 할 때이 이미지를 보냈습니다.
그러나 우리는 포기하지 않으며, 적절한 지원이 추가 될 것입니다.
-
==============================
2.나는 같은 문제를 겪었고 PR은 다음 Spring Data JDBC 릴리스에 포함되어 있지만 Spring AOP와 함께 다음 해결 방법을 사용할 수 있습니다. "완벽"하지는 않지만 근본적인 문제가 해결 될 때까지는 충분합니다.
나는 같은 문제를 겪었고 PR은 다음 Spring Data JDBC 릴리스에 포함되어 있지만 Spring AOP와 함께 다음 해결 방법을 사용할 수 있습니다. "완벽"하지는 않지만 근본적인 문제가 해결 될 때까지는 충분합니다.
@Around("execution(public * my-app-pacakage.repository.*.save(..))") public Object aspectController(ProceedingJoinPoint jp) throws Throwable { try { return jp.proceed(); } catch (DbActionExecutionException e) { if (e.getCause() instanceof DataRetrievalFailureException) { return jp.getArgs()[0]; } return e; } catch(Throwable e) { throw e; } }
-
==============================
3.당신이 엔티티에서 USR_ID 필드와 해당 시퀀스를 선언해야한다고 생각합니다.
당신이 엔티티에서 USR_ID 필드와 해당 시퀀스를 선언해야한다고 생각합니다.
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XXXX") @SequenceGenerator(sequenceName = "YYYY", allocationSize = 1, name = "XXXX") Long USR_ID;
from https://stackoverflow.com/questions/54239345/spring-data-jdbc-dataretrievalfailureexception-unable-to-cast-oracle-sql-row by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 배치 : 집계 된 리더 / 작성기 문제 (0) | 2019.05.23 |
---|---|
[SPRING] SpringMVC-FileUpload - 클라이언트가 보낸 요청의 구문이 올바르지 않습니다. (0) | 2019.05.23 |
[SPRING] Hibernate에서 프라이 머리 키 생성을 위해 사용 된 카운터를 수동으로 업데이트 하시겠습니까? (0) | 2019.05.23 |
[SPRING] Spring MVC : HTTP 세션 관리 "equivalent" (0) | 2019.05.23 |
[SPRING] java.lang.NoSuchFieldError : APPLICATION_CONTEXT_ID_PREFIX (0) | 2019.05.23 |