2011-07-11 32 views
1

想象我有3个实体,Basic < - Sub < - SubSub。我想选择BasicSub但不SubSub如何使用JPA 1.0执行非多态JPQL查询?

我已经发现,在JPA 2.0我可以有这个疑问 SELECT b FROM Basic b WHERE TYPE(b) IN (Basic,Sub) 但实现我一起工作是Apache的OpenJPA的-1.2.3-SNAPSHOT

如何使用JPA 1.0完成任务?我为任何事情开放。我可以查询Discriminator列(纯SQL或JPQL)吗?有没有某种queryHint?它可以解决不使用继承,但某种组成?

我很感谢您的帮助。 THX

+0

JPA1.2不存在。也许你的意思是JPA1.0 – DataNucleus

+0

8 [你说得对。我是*尴尬* – unR

回答

2

我没有测试,但我认为你需要一些与此类似:

SELECT b FROM Basic b WHERE b NOT IN (FROM SubSub) 
+0

这是一个非常愚蠢的想法:) 虽然我猜它会是这样的。 'SELECT b FROM Basic b WHERE b NOT IN(SELECT s FROM SubSub s)' 错? 仍然看起来像一个解决方法,但不错:) – unR

+0

是的,但我认为在这种情况下,在“JPA”选择部分是可选的。无论如何,你的查询应该也可以。但是,我不认为这是一种解决方法,我认为这是做到这一点的正确方法。事实上,我比JPA 2.0更喜欢它。替代你粘贴...(因为你真的想要不是SubSubs的基础知识,查询是逻辑。)。如果它的工作,请不要犹豫,以接受的标记答案:) – edutesoy

+0

我会毫不犹豫,非常感谢你:) 我只是称它为解决方法,因为我猜你不能选择'基本'和SubSub的中间出来的?!?但谁在乎。那不是我所需要的......。因为我使用'SingeTableInheritance'会'SELECT b FROM Basic b WHERE b.id NOT IN(SELECT s.id FROM SubSub s)''提高性能? 无论如何,thx再次。 – unR