これは、計算された列を Hibernate のエンティティにきれいにマッピングすることに関するものです。計算列を持つビューを作成する複雑な SQL クエリがあります。説明するための簡単なバージョンを以下に示します。ここでは、平均関数呼び出しがザラザラした SQL の束になります...
CREATE VIEW `Complex` AS
select
`p`.`parentId` AS `complexId`,
avg(`t1`.`someColumn`) AS `complexColumn`
from
(`Parent` `p`
join `Table1` `t1` ON ((`p`.`parentId` = `t1`.`table1Id`)))
group by `p`.`parentId`
complexId によって結合された Parent への関連付けで使用される Complex のエンティティ クラスがあります。
@Entity
public class Parent {
...
@OneToOne
@PrimaryKeyJoinColumn(name = "complexId")
private Complex complex;
...
Parent を返すコレクション クエリは、計算された列を持つ関連付けられたビューの結果を適切に返します。
ここでの問題は、ビューなしで複雑なクエリを作成することによって、この同じ関連付けを作成する方法があるかどうかです。
この理由は、パラメータとサブクエリに関する MySql のビューの制限によるものです。これは、ビュー指向でないクエリですべて表すことができれば回避できます。