2
我正在使用JSF 2一个项目,我有一个做电影的建议特别复杂的查询存储复杂的查询。我试图把它作为一个命名查询和编译器告诉我,有一个错误,我真的不知道去哪里找作为命名查询
SELECT M.*
FROM Account A,
Movie M,
Orders O,
Rental R,
(SELECT Acc.Id
FROM Account Acc,
(SELECT COUNT(*) AS c,
Acc.Id
FROM Account Acc,
(SELECT M.*
FROM Account A,
Rental R,
Orders O,
Movie M
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id=:id) AS a
INNER JOIN
(SELECT M.*,
A.Id AS AccountId
FROM Account A,
Rental R,
Orders O,
Movie M
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id<>:id) AS b USING (Id,Name,TYPE,Rating,DistrFee,NumCopies)
WHERE Acc.Id = b.AccountId) AS COUNT
WHERE COUNT.c>0
AND COUNT.Id = Acc.Id) AS SimilarAccount
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id=:id
AND M.Id NOT IN
(SELECT M.Id
FROM Account A,
Rental R,
Orders O,
Movie M
WHERE A.Id=R.AccountId
AND R.MovieId=M.Id
AND R.OrderId=O.Id
AND A.Id=SimilarAccount.Id)
性能问题不谈(教授希望电影的建议,可以通过MySQL的完成),我不确定存储这个查询重复使用的过程。我将存储查询作为视图,但它有一个参数(它需要用户参数ID)
你会如何建议保存此查询?
也许为'View'?不......有参数。存储过程,否则。 – BlitZ
“AND A.Id =:id为”<==这看起来奇怪,也许 “:” 实在太多? – DrCopyPaste
:id是一个参数。这些是JPA中NamedQueries的正常语法。我通过将其转换为存储过程并通过NativeQuery调用过程来实现它。尽管如此,如果有人有更好的主意,我仍然可以解决问题。 –