2009-06-22 6 views
1

Guten Tag,Hibernate Satz auf einem zugeordneten Tabelle ‚SQL-Select‘

Ich habe eine Hibernate Mapping, die so etwas wie dieses

<class name="Person"> 
    <id name="id" type="long" column="person_id" unsaved-value="null"> 
     <generator class="sequence"> 
      <param name="sequence">person_id_seq</param> 
     </generator> 
    </id> 
    ... 
    <set name="thinCollection" table="(select person_id, person_property from some_other_table where another_property = 'something')" fetch="subselect" lazy="false"> 
    <key column="person_id"/> 
    <element column="person_property" type="long"/> 
    </set> 
    ... 
</class> 

Nun mein Problem geht, ist, wenn eine Person Objekt wird es gespült versucht, eine Collection Remove-Aktion gegen Person # thinCollection auszuführen, die fehlschlägt, weil sie versucht, delete from (select person_id, person_property from some_other_table where another_property = 'something') auszuführen.

Also in Einklang damit, wie höre ich Hibernate davon ab, solche Aktionen (sowie Update und Einfügungen) auszuführen?

Dank

+0

Ich bin erstaunt, dass Hibernate Sie weit bringen ... ist das sogar eine unterstützte Konfiguration? – skaffman

+0

Offenbar ist es. ..Das ist, bis Sie die Spülung der Entität bekommen und dann werden Sie treffen, was ich gerade gepostet habe. –

Antwort

0

funktionieren würde, was ich tat, um zur Zeit zu lösen das ist meinen eigenen persister (die eine Unterklasse von BasicCollectionPersister ist) zu schaffen, die nie tut ein Einfügen/Aktualisieren/Löschen.

Aber ich bin mir nicht sicher, ob dies der beste Weg ist, um dies zu tun, oder wenn einfach ein magisches Mapping-Attribut hinzugefügt werden könnte, um das Einfügen/Aktualisieren/Löschen zu verhindern.

[EDIT]

Ich fand es schwer meine Set zu einem subselect abzubilden, so habe ich meine eigene benutzerdefinierte BasicCollectionPersister statt. Ich überschreibe #isRowDeleteEnabled() und #isRowInsertEnabled(), damit beide immer false zurückgeben. Und ich überschreibe #doUpdateRows (..), um immer 0 zurück zu geben.

0

Würde nicht

cascade="none" 

die trick tun? [EDIT] Oups, dachte, es ist NHibernate: P Nun, ich hoffe, dass es noch :)

+0

Ich habe cascade = "none" versucht und es funktioniert nicht. Ich denke, es gilt nur für die Entitäten der Sammlung und nicht für die Sammlung selbst. –

Verwandte Themen