2013-07-27 10 views
1

varchar 필드에 여러 프리미티브 유형을 가질 수있는 값을 저장하는 JDOQL/DataNucleus 저장 레이어가 있습니다. 그들 중 일부는 숫자이며, 수치 상수와 (</>/...)를 비교해야합니다. 어떻게 그것을 달성합니까? 예를 들어 (java.lang.) 필드 또는 값에 Long.parse (예 : java.lang.Long.parseLong (field) > java.lang.Long.parseLong (string_param)), 문자열 필드 등에 대해 long 유형의 매개 변수를 제공하는 등 하지만 작동하지 않습니다. 사실, 저는 거의 모든 오류를 거의 갖지 않습니다. 다양한 조합으로 인해 쉽게 식별 할 수없는 이유로 모든 값을 반환하거나 값을 반환하지 않습니다. 문서가 있습니까?JDOQL에서 문자열을 숫자로 변환하는 방법은 무엇입니까?

설명 : 필드는 문자열 유형 (실제로 get을 수행하는 문자열 모음)입니다. 값의 일부 하위 세트의 경우 int를 저장할 수 있습니다 (예 : "3"문자열, 예를 들어해야합니다. 값> = 2 필터. 캐스트를 사용해 보았지만 에러가 발생했지만 좀 더 조사하도록하겠습니다.

+1

여기에서 JDO에 대해 이야기하고 있으므로 숫자로 비교하려는 필드는 실제로 '문자열'입니까? 나는 여러분이 수치 적으로 비교할 필요가있는 지속 된 클래스 멤버 변수가'String'이라는 것을 의미합니까? –

답변

0

JDO에는 JDOQL과 함께 사용할 수있는 잘 문서화 된 메소드 세트가 있으며 DataNucleus JDO에서는 몇 가지 추가 메소드를 추가하여 http://www.datanucleus.org/products/accessplatform_3_3/jdo/jdoql.html#methods

과 같은 다른 사용자에 대한 지원을 추가하려면 (해당 링크와 동일한 페이지에서) JDOQL 캐스트를 사용할 수도 있습니다.

+0

이 시나리오에서는 캐스트가 작동하지 않습니다. "(long) values.get (2)> param0과 같은 필터 사용" JDOUserException : org.datanucleus.store의 "cast to [email protected]3"작업을 수행 할 수 없습니다. [email protected] SQLExpression 소스를 살펴보면, 무엇을 캐스팅해도 상관 없습니다. StringExpression은 아무 것도 캐스트 할 수 없습니다. SQL92 및 비 SQL 저장소에 대한 "일류"지원을 구현하려면 무엇을해야하며, SQL과 메모리 내 플러그인을 toLong과 같은 메소드로 구현하십시오. DN이 적절한 경우 각각 DN을 사용합니까? – Sergey

+0

캐스팅이 구현되지 않았기 때문에 누군가가 문자열을 무언가에 캐스트하는 기능을 제공 할 수 없다는 것을 의미하지는 않습니다 (대부분의 사람들은 '문자열'을 '문자열'로 저장합니다.) 기여하기 위해). 메서드 호출로 처리하려면 데이터 저장소에서 데이터를 평가하려면 sql_method를 수행하고 메모리가 있으면 store_query_methods를 사용하십시오 (또는 어느 지점에서 두 가지가 필요할 수도있는 경우 둘 다 제공하십시오) – DataNucleus