So setzen Sie eine null in die Datenbank für das integer-Feld mit hibernate?
Ich bin versucht, zu aktualisieren ein Feld in der Datenbank null für ein integer-Feld. Ich bin versucht zu tun, dass die Verwendung von hibernate. Ich kann das set-Objekt-Feld wie String und jedes andere Objekt auf null, aber keine ganze Zahl.
<?xml version="1.0" encoding="UTF-8"?>
<class name="App_Users" table="app_users" schema="bidtool">
<id name="userId" type="int" column="user_id">
<generator class="assigned"/>
</id>
<property name="username" type="string">
<column name="username" length="20" not-null="true" />
</property>
<property name="password" type="string">
<column name="password" length="20" not-null="true" />
</property>
<property name="firstname" type="string">
<column name="firstname" length="20" />
</property>
<property name="lastname" type="string">
<column name="lastname" length="20" />
</property>
<property name="userType" type="int">
<column name="user_type" />
</property>
<many-to-one class="MasterOrg" fetch="select" name="masterOrg">
<column name="master_org_id" />
</many-to-one>
<many-to-one class="CarrierScac" fetch="select" name="carrierScac">
<column name="scac" />
</many-to-one>
<one-to-one class="AppUserDetails" fetch="select" name="details" constrained="true"/>
<set name="profiles" inverse="true">
<key>
<column name="user_id" />
</key>
<one-to-many class="Profiles" />
</set>
<set name="boilerPlates" inverse="true">
<key>
<column name="user_id" />
</key>
<one-to-many class="BoilerPlate" />
</set>
<set name="rates" inverse="true" >
<key>
<column name="user_id" />
</key>
<one-to-many class="BidToolRates" />
</set>
</class>
In den oben genannten hibernate-mapping-code, den ich einstellen will MasterOrg Feld als null.
- Enthält Ihre Datenbank-schema erlauben, wird ein NULL-Wert für die
master_org_id
Spalte? Vielleicht ist es definiert einen Standard-Wert. Solange Ihre ReferenzApp_User.masterOrg = null
es sollte einfach nur funktionieren - Ich habe versucht, Sie den null-Wert in der Datenbank mit hibernate. Das Feld in der Datenbank ist vom Typ primitive int. Ich brauche zum einfügen von null in das Feld vom Typ int.
- Ja, meine Datenbank-schema erlauben, wird ein null-Wert für die master_org_id Spalte. Ich denke, das problem entsteht, weil master_org_id ist von primitiven Typ int. Es funktioniert gut für String-und andere Objekt-Typ
- Angesichts Ihres Mappings, werden im Ruhezustand Feld ist vom Typ MasterOrg: es ist eine viele-zu-eins-Assoziation. Eine Einstellung von null darf nicht dazu führen, keine problem. Warum zeigen Sie nicht den code des Unternehmens, den code, den Sie verwenden, um es zu null, und der stack-trace der exception bekommst du?
- können Sie nach dem code, wo Sie setzen es auf null und nennen das sparen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es am besten, um das Objekt-Wrapper für den primitiven Typen, also Integer für int, Double für double, ... etc, weil die primitiven Typen nicht zulassen, für die Möglichkeit von null-das ist immer möglich, ein Datenbank-design.
Selbst wenn ein Wert deklariert ist nicht null in die Datenbank ein Objekt-Typ ist immer noch nützlich. Betrachten Sie die Folgen Szenario als Beispiel.
}
Übernehmen Sie den folgenden code schreiben
In diesem Beispiel t.someProperty den Wert 0 hat, denn das ist der default-Wert für ein int daher entityManager.anhalten funktioniert, aber vielleicht 0 ist kein Gültiger Wert für diese Spalte. Wenn Sie Datenbank-constraints, die auf diese Spalte erhalten Sie eine Fehler, sonst haben Sie schlechte Daten in der Datenbank.
Wenn someProperty erklärt wurde, mit den wrapper-Typ Integer ist und der Entwickler vergisst, um die somePorpety Wert, dann erhalten Sie eine nicht-null-Ausnahme.
Einem zweiten Grund immer-Wrapper ist die Einfachheit als Entwickler möchte ich einheitliche Struktur in Entitäten, da code wird häufiger gelesen, dass es geschrieben ist, so universell verwenden von wrapper-Typen auf Personen macht, die Dinge vorhersehbar für eine Beibehaltung der code in 5 Jahren.