私は、SecurityContactと呼ばれるテーブルを持っています。これは、別のテーブル連絡先と多対1の関係を持っています。連絡先には2つの結合列があり、そのうちの1つはagentContactと呼ばれ、もう1つはauditContactです。私は、次のHQLクエリを実行しようとしています:LEFT JOINを無視している休止状態
はSELECT sc FROM SecurityContact sc LEFT JOIN sc.agentContact ac LEFT JOIN sc.auditContact ac2 WHERE sc.securityId=:securityId2
しかし、休止状態に完全LEFTは、文のJOIN無視し、内部結合を利用SQLを生成するために進みます。これは私の目的にはまったく合っていません。私は幸運のない注釈の設定を試みました。この問題は2日以上私を狂わせてしまったので、助けを借りれば大いに感謝します。ここで
は私のSecurityContactクラスのコードです:あなたのHQL join syntaxがグラグラに見える
select securityco0_.agent_id as col_0_0_, securityco0_.audit_id as col_1_0_, securityco0_.create_date as col_2_0_, securityco0_.create_user as col_3_0_, securityco0_.modify_date as col_4_0_, securityco0_.modify_user as col_5_0_, securityco0_.securityContact_id as col_6_0_, securityco0_.security_id as col_7_0_, agentconta3_.contact_id as contact1_0_0_, agentconta4_.contact_id as contact1_0_1_, agentconta3_.bank_id as bank10_0_0_, agentconta3_.create_date as create2_0_0_, agentconta3_.create_user as create3_0_0_, agentconta3_.email as email0_0_, agentconta3_.fax as fax0_0_, agentconta3_.modify_date as modify6_0_0_, agentconta3_.modify_user as modify7_0_0_, agentconta3_.name as name0_0_, agentconta3_.phone as phone0_0_, agentconta4_.bank_id as bank10_0_1_, agentconta4_.create_date as create2_0_1_, agentconta4_.create_user as create3_0_1_, agentconta4_.email as email0_1_, agentconta4_.fax as fax0_1_, agentconta4_.modify_date as modify6_0_1_, agentconta4_.modify_user as modify7_0_1_, agentconta4_.name as name0_1_, agentconta4_.phone as phone0_1_ from SecurityContact securityco0_ left outer join AgentContact agentconta1_ on securityco0_.agent_id=agentconta1_.contact_id left outer join AgentContact agentconta2_ on securityco0_.audit_id=agentconta2_.contact_id inner join AgentContact agentconta3_ on securityco0_.agent_id=agentconta3_.contact_id inner join AgentContact agentconta4_ on securityco0_.audit_id=agentconta4_.contact_id where securityco0_.security_id=?
ここでは、Hibernateで左結合を使用すると問題はありますか?あなたはHQLクエリで何を質問していますか?どのような結果が、単純な 'securityContact from securityId =? 'と違うと思いますか? –
@matt利用可能な対応するagentContactまたはauditContactがなくても、Hibernateがエントリを返すようにしたいので重要です。それは内部結合でそれをしません。 –
ですが、デフォルトでは '@ ManyToOne'の関連付けはオプション/ NULL可能ではありませんか?この関係の反対側は、他のクラスではどのように見えますか?単純な 'session.get(SecurityContact.class、securityId)'はどちらのフィールドもnullであるインスタンスを返さないと言っていますか? –