Gibt es eine Möglichkeit in den Ruhezustand zu setzen, die nicht-null-Wert zu true für speichern aber nicht löschen, die in einer mapping-config?
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.lexiclan.orm.dao">
<class name="Address" table="ADDRESSES" lazy="false">
<id name="addressId" column="ADDRESS_ID">
<generator class="native" />
</id>
<many-to-one name="addressType" column="ADDRESS_TYPE_ID" not-null="true" class="AddressType" lazy="false" />
<many-to-one name="contact" column="CONTACT_ID" not-null="true" class="Contact" lazy="false" />
<property name="address1" column="ADDRESS_1" />
<property name="address2" column="ADDRESS_2" />
<property name="city" column="CITY" />
<property name="stateProvince" column="STATE_PROVINCE" />
<property name="zipPostalCode" column="ZIP_POSTAL_CODE" />
<property name="countryRegion" column="COUNTRY_REGION" />
</class>
</hibernate-mapping>
In diesem Beispiel wird eine Adresse benötigt sowohl einen Kontakt und eine Adresse geben Sie die Beziehung, bevor Sie Sie verwenden "Session.save()" (das ist, was ich will), aber wenn ich verwenden möchten " - Sitzung.delete()" habe ich auch einen Kontakt angeben-und Adresse-Typ-Beziehung, weil der nicht-null. Gibt es eine Möglichkeit, solche Werte zu speichern, aber nicht auf update/delete-Operationen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
"nicht-null" ist nicht eine bedingte Einschränkung. Entweder Ihre Eigenschaften (
addressType
/contact
) sind IMMER erforderlich, in dem Fall gibst du Sie alsnot-null="true"
oder Sie sind es nicht."Manchmal" ist das gleiche wie "nicht erforderlich". Wenn Sie ausführen müssen, bedingte Validierung (zum Beispiel beim einfügen, aber nicht während der Updates, oder basierend auf anderen entity-Staat), können Sie entweder tun, also in Ihrem code vor dem Aufruf session-Methoden oder schreiben Sie eine Ereignis-listener oder eine interceptor um es für Sie tun.
Sagte, Löschung ist ein besonderer Fall.
session.delete()
löscht beibehalten Entität, was bedeutet, es hat bereits validiert und hat sich seine Eigenschaften als nicht-null. Wenn Sie möchten löschen von id (das heißt, Sie haben nicht die Entität geladen in der Sitzung), können Siesession.load()
zu beziehen proxy:Entweder Weg, ich bin mir nicht ganz sicher was du meinst mit "ich habe auch einen Kontakt angeben-und Adresse-Typ-Beziehung, weil der nicht-null -" im Falle der Löschung. Sie nicht - Sie sind bereits festgelegt; Sie angegeben wurden, als entity gespeichert wurde.
save()
- entweder Sie rufenget()
/delete()
oderload()
/delete()
. Ansonsten (wenn Sie nicht reden, Löschung) habe ich angesprochen bedingte Zustand prüft, in meiner Antwort oben.Ich denke, dass nicht null ist ein Datenbank-constraint. Warum gehst du nicht mit einem HQL-statement wie dem folgenden:
Diese Weise brauchen Sie nicht das ganze Objekt, um es zu löschen aus der Datenbank.
Ich fand keine Möglichkeit, es zu tun.
Denken Sie über ein anderes ORM.