簡體   English   中英

JPQL一對多查詢

[英]JPQL one-to-many query

實體A有一些類型B的實體的集合。類型B不知道(也不應該)類型A是什么。 我想查詢具有至少一個具有某些屬性的B的A。

至於映射,我在A映射端使用了簡單的一對多和一個連接列。

但是,當我使用JPQL執行此操作時,我不能真正使用JPA生成的列a_id,因為它不是B字段-因此會導致PropetyNotFound-jpa異常。 有沒有一種方法可以使用該列而不必在實體本身中定義屬性?

實體A映射:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
        http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
    version="2.0">

    <package>com.example</package>

    <entity class="B" access="FIELD">
        <attributes>
            <id name="seqid">
                <generated-value strategy="AUTO" />
            </id>
            <basic name="identifier" />
            <basic name="payload" />
            <version name="version" />
        </attributes>
    </entity>

    <entity class="A" access="FIELD">
        <attributes>
            <id name="seqid">
                <generated-value strategy="AUTO" />
            </id>
            <one-to-many name="bset">
                <join-column name="a_id"
                    referenced-column-name="seqid" />
                <cascade>
                    <cascade-all />
                </cascade>
            </one-to-many>
        </attributes>
    </entity>

</entity-mappings>

謝謝!

只要確保您在集合上使用join子句即可。 沒有它,查詢將被構造為沒有錯誤,但是執行時會失敗,並出現一個奇怪的錯誤。 所以正確的查詢看起來像

select a from A a join a.setB b where b in (select c from B where B.x = 'x');

這將是成功的,但是

select a from A a where a.setB in (select c from B where B.x = 'x');

沒有明顯的原因會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM