Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hibernate在数据库中为整数字段设置空值?_Java_Hibernate_Netbeans_Null - Fatal编程技术网

Java 如何使用hibernate在数据库中为整数字段设置空值?

Java 如何使用hibernate在数据库中为整数字段设置空值?,java,hibernate,netbeans,null,Java,Hibernate,Netbeans,Null,我正在尝试将数据库中的一个整型字段更新为null。我正在尝试使用hibernate来实现这一点。我可以将对象字段(如字符串)和任何其他对象设置为null,但不能设置整数 <?xml version="1.0" encoding="UTF-8"?> 在上面的hibernate映射代码中,我想将MasterOrg字段设置为null 最好将对象包装器用于基本类型,即整数表示int,双精度表示Double。。。等等,因为基元类型不允许null的可能性,这在数据库设计中总是可能

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

<?xml version="1.0" encoding="UTF-8"?>




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

最好将对象包装器用于基本类型,即整数表示int,双精度表示Double。。。等等,因为基元类型不允许null的可能性,这在数据库设计中总是可能的

即使一个值在数据库中声明为NOTNULL,对象类型仍然是有用的。考虑下面的场景作为例子。

@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是使用整型包装器类型声明的,并且开发人员忘记设置somePorpety值,那么您将得到一个NOTNULL异常


始终使用包装器的第二个原因是简单性。作为一名开发人员,我希望跨实体的结构保持一致,因为代码的读取频率更高,因此在实体上普遍使用包装器类型可以让一些人在5年后维护代码

您的数据库架构是否允许
master\u org\u id
列的值为空?也许它被定义为使用默认值。只要您的引用
App\u User.masterOrg=null
它就应该work@JoeriHendrickx我尝试使用hibernate将空值插入数据库。数据库中的字段类型为primitive int。我需要在int类型的字段中插入null。@Brad Yes我的数据库架构允许master_org_id列的值为null。我认为问题的产生是因为master_org_id是primitive int类型。它适用于字符串和其他对象类型给定映射,Hibernate字段是MasterOrg类型:它是多对一关联。将其设置为null不会导致任何问题。为什么不显示实体的代码、用于将其设置为null的代码以及获得的异常的堆栈跟踪?@alokdashresthanepali能否将代码发布到将其设置为null的位置并调用save?最好对可为null的列使用对象包装器,对不可为null的列使用基本类型。如果值永远不能为空,为什么我要强制实体的所有用户处理可能为空的值?我完全不同意。如果0不是可接受的默认值,则使用适当的OO设计和单元测试来确保始终设置值,例如,将该值作为构造函数的参数。根据您的推理,如果您忘记放置NOTNULL约束,您也会得到错误的数据(以及错误的对象设计)。忘记事情可能会发生,并导致错误。纠正错误,但不要损害良好的OO设计,希望这能减少错误。一致性也不是一个好的理由。根据这种推理,您永远不应该使用int、boolean或float,因为有时您会使用Integer、boolean和float。为什么要将这种推理局限于实体?使用正确的类型:整数表示可为null的整数;int表示不可为null的int。实体是pojo。我认为这不是问题的答案。在代码中,他使用的不是原始int,而是MasterOrg。这是可以为空的。
ExampleEntity t = new ExampleEntity();
entityManager.persist(t);