gpt4 book ai didi

java - 如何使用 hibernate 在数据库中为整数字段设置一个空值?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:51:58 24 4
gpt4 key购买 nike

我正在尝试将数据库中的一个字段更新为整数字段的空值。我正在尝试使用 hibernate 来做到这一点。我可以将对象字段(如 String 和任何其他对象)设置为 null,但不能设置整数。

<?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>


在上面的 hibernate 映射代码中,我想将 MasterOrg 字段设置为空。

最佳答案

最好对基本类型使用对象包装器,即 Integer 代表 int,Double 代表 double,...等等,因为基本类型不允许 null 的可能性,这在数据库设计中总是可能的。

即使数据库中的值声明为非空,对象类型仍然有用。以以下场景为例。

@Entity 
public class ExampleEntity {
@Column(name="some_column") // assume this column is defined not null in the database
private int someProperty;

getttes settters other fields go here

假设你写了下面的代码

ExampleEntity t = new ExampleEntity();
entityManager.persist(t);

在此示例中,t.someProperty 的值为 0,因为这是 int 的默认值,因此 entityManager.persist 有效,但 0 可能不是该列的有效值。如果你对该列有数据库约束,那么你会得到一个错误,否则你在数据库中有错误的数据。

如果 someProperty 是用 Integer 包装器类型声明的,而开发人员忘记设置 somePorpety 值,那么您将得到一个非空异常。

始终使用包装器的第二个原因是作为开发人员的简单性我希望实体之间具有一致的结构,因为代码被更频繁地阅读,因此在实体上普遍使用包装器类型编写的代码对于维护代码 5 年的人来说是可预测的现在。

关于java - 如何使用 hibernate 在数据库中为整数字段设置一个空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com