我正在学习 EJB,JPA 并且有非常基本的疑问
我有 3 张桌子 A、B、C
A - ID,姓名
B - ID、姓名
C - ID、A_ID、B_ID
当我从数据库创建实体类时,我得到了 3 个带有 JPA 内容的 EJB 类。
现在在我的托管 bean 中,我得到 A.Name 或 B.Name,我需要使用 C 找到匹配的条目。
普通 SQL 查询看起来像(可能不是最好的查询)
SELECT a.name FROM schema.A a, schema.B b, schema.C c 其中 b.Name='ABC' and c.B_ID=b.ID and a.ID = c.A_ID;
现在我在哪里可以在我的课程中进行上述查询。
我遇到了@SecondaryTable,但不明白它是如何使用的。
我还看到了 em.createQuery(SQL query).getResultList()。
现在是上面最好的方法,或者 EJB/JPA 中是否有更好的方法。
更新 1:
我试图在 em.CreateQuery 中执行查询
em.CreateQuery(SELECT a.name FROM A a, B b, C c where b.Name='ABC' and c.B_ID=b.ID and a.ID = c.A_ID).getResultList();
但我的 GlassFish Server 出现以下错误(我正在使用 EcipeLink JPA)
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
Position:
Error Code: 0
Call: SELECT t0.given_name FROM test.a t3, test.a_b t2, test.b t1, test.a t0 WHERE ((((t1.Name = ?) AND (t2.b_id = t1.id.t1.id)) AND (t0.id = )) AND (t3.id = t2.a_id))
bind => [1 parameter bound]
Query: ReportQuery(referenceClass=Consultant sql="SELECT t0.given_name FROM test.a t3, test.a_b t2, test.b t1, test.a t0 WHERE ((((t1.Name = ?) AND (t2.b_id = t1.id.t1.id)) AND (t0.id = )) AND (t3.id = t2.a_id))")
现在为什么 SQl 语句在错误日志中被弄乱了
1.有一个额外的入学测试。a t0
2.t2.b_id = t1.id.t1.id
3.t0.id=
错误日志 SQL 语句是如何生成的。