Mysql 将复杂查询存储为命名查询
我正在使用JSF2做一个项目,我有一个特别复杂的查询,可以提供电影建议。我试图把它作为一个命名查询,编译器告诉我有一个错误,我真的不知道该去哪里查找Mysql 将复杂查询存储为命名查询,mysql,sql,named-query,Mysql,Sql,Named Query,我正在使用JSF2做一个项目,我有一个特别复杂的查询,可以提供电影建议。我试图把它作为一个命名查询,编译器告诉我有一个错误,我真的不知道该去哪里查找 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
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
你建议如何存储这个查询?
< p>我建议创建一个具有关键值对的java属性文件,并在DAO类中创建一个私有字段类型,并使用Spring配置注入它,它将读取文件中的值,或者U可以考虑使用存储过程。如果我对你的理解是正确的……也许可以作为观点?不有情人。存储过程,否则为。A.Id=:Id:Id是一个参数。这些是JPA中NamedQuery的正常语法。我通过将其转换为存储过程并通过NativeQuery调用该过程使其工作。不过,如果有人有更好的想法,我会把这个问题留待讨论。我不使用Spring,只使用JSF2。但是谢谢你的建议。