반응형
mariadb 및 SqlResultSetMapping을 사용한 JPA 네이티브 쿼리가 이상한 오류를 던짐
관계:
회사에 주소가 있습니다.이것이 제가 이 간단한 예를 위해 테스트하고 있는 전부입니다.
이것은 SqlResultSetMappings가 있는 주소 엔티티입니다.
@Entity
@Table(name="addresses")
@SqlResultSetMappings({
@SqlResultSetMapping(name = "addresses.simpleQuery", entities = {
@EntityResult(entityClass = Company.class,
fields = {
@FieldResult(name = "id", column = "company_id")
}
),
@EntityResult(entityClass = Address.class)
})
})
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Version
private Integer version;
private Long createdAt;
private Long updatedAt;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="company_id")
private Company company;
//some other fields like city, state etc
//getters and setters
}
그리고 여기가 회사 법인입니다.
@Entity
@Table(name="companies")
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Version
private Integer version;
private Long createdAt;
private Long updatedAt;
@OneToMany(mappedBy = "company", fetch = FetchType.LAZY)
private Set<Address> addressSet;
//some other fields like name
//getters and setters
}
간단한 네이티브 쿼리를 실행하고 결과 집합을 다음과 같이 매핑하는 것이 목적입니다.
List queryResult = entityManager.createNativeQuery("
select c.id as company_id, name, a.id as id
from companies c, addresses a
where c.id=a.company_id limit 3", "addresses.simpleQuery").getResultList();
보고 또 보고...내가 쿼리를 실행하면 폭발합니다.
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.loader.Loader.doList(Loader.java:2556)
at org.hibernate.loader.Loader.doList(Loader.java:2539)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369)
at org.hibernate.loader.Loader.list(Loader.java:2364)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:353)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1873)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141)
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449)
... 65 more
Caused by: java.sql.SQLException: No such column :created_2_2_0_
at org.mariadb.jdbc.internal.common.queryresults.ColumnNameMap.getLabelIndex(ColumnNameMap.java:78)
at org.mariadb.jdbc.internal.common.queryresults.ColumnNameMap.getIndex(ColumnNameMap.java:26)
at org.mariadb.jdbc.MySQLResultSet.findColumn(MySQLResultSet.java:479)
at org.mariadb.jdbc.MySQLResultSet.getLong(MySQLResultSet.java:170)
at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:74)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1695)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1627)
at org.hibernate.loader.Loader.getRow(Loader.java:1514)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:725)
at org.hibernate.loader.Loader.processResultSet(Loader.java:952)
at org.hibernate.loader.Loader.doQuery(Loader.java:920)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
at org.hibernate.loader.Loader.doList(Loader.java:2553)
... 74 more
이제 누가 제가 왜 네이티브 쿼리를 사용하는지 묻기 전에, 비슷한 방식으로 폭발하는 더 복잡한 사용 사례(훨씬 더 복잡한 쿼리)가 있다는 것을 덧붙이고 싶습니다.그래서 문제를 재현하고 포인터를 얻을 수 있는지 확인하기 위해 위의 테스트를 만들었습니다.
내가 뭘 잘못하고 있나요?생성된_2_2_0이(가) 선택된 이유는 무엇입니까?제가 선택한 진술서에는 그것이 없습니다.이것이 mariadb 드라이버 버그일 수 있습니까?
언급URL : https://stackoverflow.com/questions/25877869/jpa-native-query-with-mariadb-and-sqlresultsetmapping-throwing-a-weird-error
반응형
'programing' 카테고리의 다른 글
한 컨트롤러에서 언로드하기 전에 AngularJS window.on이 다른 컨트롤러에서 트리거됨 (0) | 2023.11.06 |
---|---|
마지막 로그온을 DateTime 형식으로 변환 (0) | 2023.11.06 |
Swift에서 스레드 안전 배열 만들기 (0) | 2023.11.06 |
삽입 문으로 MySQL 내보내기 쿼리 (0) | 2023.11.06 |
javascript에서 배열의 요소를 설정 해제하려면 어떻게 해야 합니까? (0) | 2023.11.06 |