我想知道如何使用Spring Framework将属性从Object Source复制到Object Dest忽略null值.
我实际上使用Apache beanutils,使用此代码
beanUtils.setExcludeNulls(true);
beanUtils.copyProperties(dest, source);
Run Code Online (Sandbox Code Playgroud)
去做吧.但现在我需要使用Spring.
有帮助吗?
多谢
我知道您可以更改现有列的默认值,如下所示:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
Run Code Online (Sandbox Code Playgroud)
但根据这个我的查询应该工作:
ALTER TABLE MyTable ALTER COLUMN CreateDate DATETIME NOT NULL
CONSTRAINT DF_Constraint DEFAULT GetDate()
Run Code Online (Sandbox Code Playgroud)
所以我在这里尝试使我的列不为Null并设置默认值.但在CONSTRAINT附近获取Incoorect语法错误.我错过了吗?
我有一个函数,它将返回一个类型的记录my_table%ROWTYPE,并在调用者,我可以检查返回的记录是否为空,但PL/SQL抱怨if语句
PLS-00306:调用'IS NOT NULL'时参数的数量或类型错误
这是我的代码:
v_record my_table%ROWTYPE;
v_row_id my_table.row_id%TYPE := 123456;
begin
v_record := myfunction(v_row_id)
if (v_record is not null) then
-- do something
end if;
end;
function myfunction(p_row_id in my_table.row_id%TYPE) return my_table%ROWTYPE is
v_record_out my_table%ROWTYPE := null;
begin
select * into v_record_out from my_table
where row_id = p_row_id;
return v_record_out;
end myfunction;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在使用db2版本9.7*,似乎不可能以任何直接的方式使NOT NULL列可以为空.
不幸的是,使用更加开发人员友好的数据库的解决方案不可用.基本上,在MySQL中,我想做类似的事情(其中MY_COLUMN曾经是VARCHAR(200)NOT NULL):
ALTER TABLE MY_TABLE MODIFY COLUMN MY_COLUMN VARCHAR(200);
Run Code Online (Sandbox Code Playgroud) 考虑下表,大约有10M行
CREATE TABLE user
(
id bigint NOT NULL,
...
CONSTRAINT user_pk PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
)
Run Code Online (Sandbox Code Playgroud)
然后我应用了以下更改
ALTER TABLE USER ADD COLUMN BUSINESS_ID VARCHAR2(50);
--OK
UPDATE USER SET BUSINESS_ID = ID; //~1500 sec
--OK
ALTER TABLE USER ALTER COLUMN BUSINESS_ID SET NOT NULL;
ERROR: column "business_id" contains null values
SQL state: 23502
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为id列(已复制到business_id列)不能包含空值,因为它是主键,但要确保我检查它
select count(*) from USER where BUSINESS_ID is null
--0 records
Run Code Online (Sandbox Code Playgroud)
我怀疑这是一个错误,只是想知道我是否遗漏了一些微不足道的东西
我有一个简单的安装表:
如果install_slot为NULL,则它是可用的安装槽.不为null - 然后,使用插槽.我需要返回给定产品和电子邮件的总安装结果,以及给定产品和电子邮件的已安装结果.我想我可以用两个查询来做这个,但是想知道是否有一种SQL方法可以在一个中完成所有操作?
我尝试了以下作为一个疯狂的猜测,但它没有奏效.
SELECT
i1.`prod_code`,
COUNT(i1.`email`) AS total_installs,
COUNT(ISNULL(i2.`install_slot`)) AS used_installs
FROM
`installs` AS i1
JOIN
`installs` AS i2
ON
i1.`prod_code` = i2.`prod_code`
WHERE
i1.`email` = 'example@example.com'
GROUP BY
i1.`prod_code`,i2.`prod_code`
Run Code Online (Sandbox Code Playgroud) 注意:从Scala 2.11开始,NotNull不推荐使用.
据我所知,如果你想让一个引用类型不可为空,你必须混合魔法NotNull特性,编译器会自动阻止你在其中放入null-able值.例如,请参阅此邮件列表线程.
缺乏的是,对非可空类型的图书馆支持不错.如果我想编写一个不需要直接连接java代码的软件包,并且我希望防止此软件包中的所有类型null默认使用,我别无选择,只能重新定义所有构建变量,如此
//can't actually do that, but just to give the general idea
class NString extends String with NotNull
class NMap[X,Y] extends Map[X,Y] with NotNull
...
Run Code Online (Sandbox Code Playgroud)
我希望scala有(作为编译器插件或库)选项供我编写
import collections.notnull._
Run Code Online (Sandbox Code Playgroud)
为了轻松禁止null在特定的scala文件中使用.
是否有一个选项可以轻松强制标准库中的许多有用类型不可为空?
我正在使用postgreSQL.我有一个专栏:
NOT NULL
Run Code Online (Sandbox Code Playgroud)
但是当我想插入一个空字符串的行时:
''
Run Code Online (Sandbox Code Playgroud)
它不会给我一个错误并接受.我该如何检查插入值应该是not empty多少?(既不是空的也不是空的)
PS:我的专栏定义为:
"ads" character varying(60) NOT NULL
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
public static void Foo()
{
Bar(null);
}
public static void Bar([NotNull] string s)
{
if (s == null)
throw new ArgumentNullException("s");
}
Run Code Online (Sandbox Code Playgroud)
该[NotNull]属性用于Bar告诉s不应为null的调用者.这工作正常,当我将null传递给Bar(可能'null'赋值给标记为'NotNull'属性的实体时),我收到警告.
但它实际上并没有阻止我传递null,所以Bar仍然必须检查是否s为null.那么为什么我也会收到警告if (s == null)(表达总是假的)?
据我所知,这个属性有一个含糊不清的含义; 根据具体情况,它可能意味着两件事:
我是否正确使用此属性,或者我错过了什么?
顺便说一下,我正在使用Resharper 7 EAP,所以它可能是一个bug; 但是我想在报告之前确保我的用法是正确的...
编辑:刚刚在R#5.1上尝试过同样的事情; 它在呼叫站点上显示警告,但不在方法中显示.我将在Jetbrain的Youtrack上报告.
EDIT2:这里报告错误
我有一个Oracle数据库,以及一个包含多个非空列的表,所有这些都具有默认值.
我想对我要插入的任何数据使用一个insert语句,并且不用费心去检查插入的值是否为空.
插入null时是否有任何方法可以回退到默认列值?
我有这个代码:
<?php
if (!empty($values['not_null_column_with_default_value'])) {
$insert = "
INSERT INTO schema.my_table
( pk_column, other_column, not_null_column_with_default_value)
VALUES
(:pk_column,:other_column,:not_null_column_with_default_value)
";
} else {
$insert = "
INSERT INTO schema.my_table
( pk_column, other_column)
VALUES
(:pk_column,:other_column)
";
}
Run Code Online (Sandbox Code Playgroud)
所以,我必须完全省略该列,否则我将错误"尝试将null插入非空列".当然我有多个可空列,所以代码创建插入语句是非常难以理解的,丑陋的,我只是不喜欢它.
我想有一个声明,类似于:
INSERT INTO schema.my_table
( pk_column, other_column, not_null_column_with_default_value)
VALUES
(:pk_column,:other_column, NVL(:not_null_column_with_default_value, DEFAULT) );
Run Code Online (Sandbox Code Playgroud)
那当然是一个假设的查询.你知道我用Oracle DBMS实现这个目标的方式吗?
编辑:
谢谢大家的答案.它接触到没有"标准"的方式来实现我想要的,所以我接受了IMO的最佳答案:我应该停止聪明并坚持通过自动构建的语句省略空值.
不完全是我想看到的,但没有更好的选择.
notnull ×10
sql ×3
alter ×2
postgresql ×2
annotations ×1
copy ×1
db2 ×1
default ×1
enterprisedb ×1
group-by ×1
isnull ×1
java ×1
mysql ×1
non-nullable ×1
nullable ×1
oracle ×1
plsql ×1
resharper ×1
scala ×1
spring ×1
sql-server ×1