ElementCollection Map의 키를 사용하여 엔티티를 필터링하고 싶습니다. 그러나 EclipseLink는 예외를 발생시킵니다. 내 문제를 설명하기 위해 작은 엔티티 클래스가 있습니다.값이 enum이고 CriteriaQuery를 사용하는 JPA ElementCollection 맵에서 키를 쿼리하는 방법?
@Entity
public class TestEntity {
public enum MyEnum {
FOO,
BAR;
}
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "pkGen")
@TableGenerator(allocationSize = 1000, initialValue = 0, name = "pkGen", table = "PRIMARY_KEYS")
private int id;
@ElementCollection(targetClass = MyEnum.class)
@Enumerated(EnumType.STRING)
@MapKeyClass(String.class)
Map<String, MyEnum> col = new HashMap<>();
public Map<String, MyEnum> getCol() {
return col;
}
}
지금 나는이 같은 COL 키 "는 foobar"모든 개체를 검색하려고 :
java.lang.ClassCastException가 :
@LocalBean public class EclipseLinkBean { @PersistenceContext private EntityManager em; public void test() { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<TestEntity> q = builder.createQuery(TestEntity.class); Root<TestEntity> testEntity = q.from(TestEntity.class); MapJoin<TestEntity, String, MyEnum> col = testEntity.joinMap("col"); q.where(builder.equal(col.key(), "foobar")); em.createQuery(q).getResultList(); } }
나는이 예외를 받고 있어요 : java.lang.String을 java.lang.Enum에 캐스팅 할 수 없습니다. at org.eclipse.persistence.mappings.converters.EnumTypeConverter.convertObjectValueToDataValue (EnumTypeConverter.java:160) ~ [org.eclipse.persistence.core_2.4.1.v20121003 -ad44345 .JAR : NA] 프로그램을 디버깅
, 그 EnumTypeConverter은 열거에 "는 foobar"를 캐스팅하기 위해 노력하고있다.
col 또는 쿼리 작성시 내 주석에 문제가 있습니까? 일반적으로 기준 API를 사용하고 있지 않지만이 경우에는해야합니다.
업데이트 : 나는 JPQL 쿼리를 사용하는 경우 문제가 발생합니다 : 모든 솔루션에 대한
em.createQuery("SELECT te FROM TestEntity te JOIN te.col c WHERE KEY(c) = 'foobar'").getResultList();
감사 또는 내 문제를 해결하는 데 도움이 힌트.
2.5도 실패합니다. 나는 벌레를 기록 할 것이다. 감사합니다 – raffael
내 문제를 설명하는 오래된 버그 보고서 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=328371)를 발견했습니다. 내가 그걸로 무엇을해야합니까? – raffael