我试图用一个值为0或1的布尔字段来持久化一个条令实体。
当属性设置为true时,它会在数据库中将其另存为“1”。但当其值为“false”或“0”时,它会在数据库中将其另存为NULL。
我如何解决这个问题,只保存为1或0?
我使用的属性的注释如下所示:
@ORM\Column(name="substitute", type="boolean", nullable=true)
当我将nullable设置为false时,我不能坚持它,因为它仍然想要设置为null。
谢谢
当我将其持久化时,字段值为0
尝试1@ORM\列(名称="替代",类型="布尔",选项={"默认":"0"}))
错误:无法保存空
尝试2@ORM\列(名称="替代",类型="布尔",nullable=true,选项={"默认":"0"}))
不起作用,它仍将null保存在base中
信息1
实际插入查询试图插入0。但是我得到了这个错误"ORA-01400:不能插入NULL到(\"MYBASE\"。\"MyTABLE\"。\"替代\")"
信息2
与另一个实体相同的附加
class TestEntity
{
/**
* @ORM\Column(name="test_entity_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="substitute", type="boolean")
*/
private $isSubstitute = false;
}
坚持
$test = new TestEntity();
$test->setIsSubstitute(false);
$em->persist($test);
后果
request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\NotNullConstraintViolationException: "An exception occurred while executing 'INSERT INTO TestEntity (test_entity_id, substitute) VALUES (?, ?)' with params [7, 0]: SQLSTATE[HY000]: General error: 1400 OCIStmtExecute: ORA-01400: cannot insert NULL into ("MYBASE"."TESTENTITY"."SUBSTITUTE") (ext\pdo_oci\oci_statement.c:148)"\n (ext\\pdo_oci\\oci_statement.c:148) at PATH\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Driver\\PDOStatement.php:91)"} []
信息3
使用oci或oci8驱动程序手动插入
sql> INSERT INTO TestEntity (test_entity_id, substitute) VALUES (13, 0)
[2017-04-06 11:21:15] 1 row affected in 62ms
我认为@Cerad的建议是正确的,你能试试吗:
/**
* @ORM\Column(name="substitute", type="boolean")
*/
protected $substitute = false;
让我们知道结果。
只需将SQLDefault设置为0(编辑:更改后需要更新模式):
/**
* @ORM\Column(type="boolean", options={"default":"0"})
*/
protected $isActive;
也可以在默认情况下初始化属性:
/**
* @ORM\Column(type="boolean", options={"default":"0"})
*/
protected $isActive = false;
只要值设置为true/false,Nullable就不重要。
如果在保存前确实将属性设置为false,但它仍将其保存为DB中的null,则会发生其他情况。
我正试图使用Spring JDBCTemplate从数据库中获取一条记录。在JdbcTemplate中,我试图通过使用类BeanPropertyRowMapper来自动化数据绑定。我的数据库表列名称类型和模型对象字段名称类型是相同的…我实现了这个API,但我没有得到预期的结果…对于int和double字段,我得到0和0.0值,尽管这些值在数据库中是不同的... 请帮助解决这个问题...我的代码如下
我有接收JSON对象的REST资源,该JSON对象是从用户ID到某个布尔值的映射,该布尔值指示该用户是否有错误。 由于我希望有大量的用户,所以我希望通过使用1/0而不是true/false来缩小这个JSON的大小。 我尝试了一下,发现在淡化过程中,Jackson会成功地将1/0转换成true/false,但是有没有办法告诉Jackson(也许使用注释?)将此布尔字段序列化为1/0而不是true/f
问题内容: 我可以设置JPA /hibernate将类型持久化为吗?在数据库中(该列定义为。当前将其存储为。数据库为Oracle。 问题答案: 我弄清楚如何执行此操作的唯一方法是为类提供两个属性。一个作为编程API的布尔值,不包含在映射中。它的getter和setter引用一个私有字符变量Y / N。然后,我有另一个受保护的属性,它包含在hibernate映射中,它的getter和setter直接
如何在NumberPicker中更改字体类型。我试着这样做,但字体不变。有什么想法吗?P、 S:颜色和文本大小正在更改。 字体和路径工作正常。我将其用于自定义文本视图。
问题内容: 如何显示JPasswordField的文本,而不是将0设置为echo char? Java文档说: 设置值为0表示您希望看到键入的文本,这与标准JTextField的行为类似。 以下导致不兼容类型错误 鲸鱼 只需将0设置为echo char(每位显示0)。 在JTextField上使用JPasswordField的原因是我想更改回显字符并用另一种方法隐藏密码。 谢谢! 问题答案: 做这
问题内容: 我必须编写一个例程,如果变量的类型为,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为或。 第一个实现是因为我认为没有数字会使算术表达式为假,但是由于计算为真,所以这是错误的。然后,我得知行为类似于0,并且以下表达式均被评估为true。 当然不是0。被评估为false。这使看似重言式的表达成为错误。 为什么实际上不是0,却像0? 问题答案: 您真正的问题似乎是: 为什么: