Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 布尔文本,以防THEN ELSE结束_Hibernate_Jpa_Eclipselink_Derby_Jpql - Fatal编程技术网

Hibernate 布尔文本,以防THEN ELSE结束

Hibernate 布尔文本,以防THEN ELSE结束,hibernate,jpa,eclipselink,derby,jpql,Hibernate,Jpa,Eclipselink,Derby,Jpql,我跟踪检查一个实体的存在 选择CASE WHEN(计数(e)>0L),然后选择TRUE或FALSE结束 从MyEntity作为e 哪里 但是当我试着 boolean存在(…){ 返回em.createNamedQuery((错误) 我从derby改为hsqldb,它可以与Boolean.class一起工作(错误) 结论 我错了。问题来自EclipseLink。我使用两种不同的提供商设置进行了测试 org.eclipse.persistence.jpa.PersistenceProvider

我跟踪检查一个实体的存在

选择CASE WHEN(计数(e)>0L),然后选择TRUE或FALSE结束
从MyEntity作为e
哪里
但是当我试着

boolean存在(…){
返回em.createNamedQuery((错误)

我从derby改为hsqldb,它可以与
Boolean.class
一起工作(错误)


结论

我错了。问题来自EclipseLink。我使用两种不同的提供商设置进行了测试

org.eclipse.persistence.jpa.PersistenceProvider

org.hibernate.ejb.HibernatePersistence

您使用哪个版本的derby?旧版本的derby不支持布尔数据类型。但您可以与整数值一起使用

 @NamedQuery(name = Currency.NQ_EXIST_BY_HREF,
            query = "SELECT" + (" CASE WHEN (COUNT(c) > 0L)"
                                + " THEN 1 ELSE 0 END")
                    + " FROM Currency AS c"
                    + " WHERE c.service = :service"
                    + " AND c.href = :href")

问题似乎是Derby不支持布尔数据类型,因此从查询返回1/0。 这就是为什么is在HSQL上工作,因为支持布尔值


由于您已经键入了命名查询返回类型,EclipseLink应该足够聪明,可以为您自动将整数转换为布尔值。它似乎没有这样做,因此请为此记录一个错误。

您显然错过了示例中的
return
语句。我相信这只是有问题的印刷错误,而不是实际的code.我刚刚在你的问题中修正了它。如果是的话,请批准。你使用的JPA版本是什么?复制并粘贴你的代码,效果很好,你确定你没有输入错误或什么吗?我在比较字段时遇到了问题,也许你在比较where子句上的整数和布尔值?奇数。请包括异常和堆栈。一般来说,m任何数据库都没有布尔类型,而是使用整数,通常为0=false,1=true。我尝试了,得到了相同的结果。她想要的是
integer。class
不是
boolean。class
@JinKwon jdk不重要。它处理的是derby。
databaseProductName: Apache Derby
databaseProductVersion: 10.8.1.2 - (1095077)
databaseMajorVersion: 10
databaseMinorVersion: 8
$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building corrs-entities 1.0-alpha-1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ corrs-entities ---
[INFO] kr.co.ticomms.corrs:corrs-entities:jar:1.0-alpha-1-SNAPSHOT
[INFO] +- org.apache.commons:commons-lang3:jar:3.1:test
[INFO] +- org.glassfish.main.extras:glassfish-embedded-all:jar:3.1.2.2:test
[INFO] +- org.jboss.arquillian.container:arquillian-glassfish-embedded-3.1:jar:1.0.0.CR3:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-spi:jar:1.0.0.CR7:test
[INFO] |  |  +- org.jboss.arquillian.core:arquillian-core-spi:jar:1.0.0.CR7:test
[INFO] |  |  +- org.jboss.arquillian.config:arquillian-config-api:jar:1.0.0.CR7:test
[INFO] |  |  +- org.jboss.arquillian.config:arquillian-config-impl-base:jar:1.0.0.CR7:test
[INFO] |  |  +- org.jboss.shrinkwrap:shrinkwrap-api:jar:1.0.0-cr-1:test
[INFO] |  |  \- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api:jar:1.1.0-beta-1:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-spi:jar:1.0.0.CR7:test
[INFO] |  +- org.jboss.arquillian.protocol:arquillian-protocol-servlet:jar:1.0.0.CR7:test
[INFO] |  +- org.jboss.arquillian.testenricher:arquillian-testenricher-cdi:jar:1.0.0.CR7:test
[INFO] |  +- org.jboss.arquillian.testenricher:arquillian-testenricher-ejb:jar:1.0.0.CR7:test
[INFO] |  +- org.jboss.arquillian.testenricher:arquillian-testenricher-resource:jar:1.0.0.CR7:test
[INFO] |  \- org.jboss.arquillian.testenricher:arquillian-testenricher-initialcontext:jar:1.0.0.CR7:test
[INFO] +- org.jboss.arquillian.testng:arquillian-testng-container:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.testng:arquillian-testng-core:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.test:arquillian-test-api:jar:1.0.3.Final:test
[INFO] |  |  \- org.jboss.arquillian.core:arquillian-core-api:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.test:arquillian-test-spi:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-api:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.core:arquillian-core-impl-base:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.test:arquillian-test-impl-base:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-impl-base:jar:1.0.3.Final:test
[INFO] |  +- org.jboss.arquillian.container:arquillian-container-test-impl-base:jar:1.0.3.Final:test
[INFO] |  \- org.jboss.shrinkwrap:shrinkwrap-impl-base:jar:1.0.1:test
[INFO] |     \- org.jboss.shrinkwrap:shrinkwrap-spi:jar:1.0.1:test
[INFO] +- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-spi:jar:2.0.0-alpha-4:test
[INFO] |  \- org.jboss.shrinkwrap.descriptors:shrinkwrap-descriptors-api-base:jar:2.0.0-alpha-4:test
[INFO] +- javax:javaee-api:jar:6.0:provided
[INFO] +- org.mockito:mockito-core:jar:1.9.5:test
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.1:test
[INFO] |  \- org.objenesis:objenesis:jar:1.0:test
[INFO] \- org.testng:testng:jar:6.8:test
[INFO]    +- junit:junit:jar:4.10:test
[INFO]    +- org.beanshell:bsh:jar:2.0b4:test
[INFO]    +- com.beust:jcommander:jar:1.27:test
[INFO]    \- org.yaml:snakeyaml:jar:1.6:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.442s
[INFO] Finished at: Tue Jan 15 16:28:01 KST 2013
[INFO] Final Memory: 11M/221M
[INFO] ------------------------------------------------------------------------
databaseProductName: Apache Derby
databaseProductVersion: 10.9.1.0 - (1344872)
databaseMajorVersion: 10
databaseMinorVersion: 9
<provider>org.hibernate.ejb.HibernatePersistence</provider> <!-- works -->
 @NamedQuery(name = Currency.NQ_EXIST_BY_HREF,
            query = "SELECT" + (" CASE WHEN (COUNT(c) > 0L)"
                                + " THEN 1 ELSE 0 END")
                    + " FROM Currency AS c"
                    + " WHERE c.service = :service"
                    + " AND c.href = :href")