Oracle 12引入了很好的功能(应该很久以前就已经存在了!) - 标识列.所以这是一个脚本:
CREATE TABLE test (
a INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
b VARCHAR2(10)
);
-- Ok
INSERT INTO test (b) VALUES ('x');
-- Ok
INSERT INTO test (b)
SELECT 'y' FROM dual;
-- Fails
INSERT INTO test (b)
SELECT 'z' FROM dual UNION ALL SELECT 'zz' FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
前两个插入运行没有问题,提供'a'为1和2的值.但第三个插入失败ORA-01400: cannot insert NULL into ("DEV"."TEST"."A").为什么会这样?一个bug?关于标识列限制的文档部分中没有提到这样的内容.或者我只是做错了什么?
我正试图从实例化对象中加载关联,即不是与父对象一起读取关联...
User.includes(:characters).first
Run Code Online (Sandbox Code Playgroud)
...推迟直到我确定它真的需要并执行以下操作:
u = User.first
# Other stuff ...
u.eager_load(:characters)
Run Code Online (Sandbox Code Playgroud)
在Rails 3中,我用这种方法增强了ActiveRecord:
def eager_load(*args)
ActiveRecord::Associations::Preloader.new(self, *args).run
end
Run Code Online (Sandbox Code Playgroud)
它工作得很好.Rails 4改变了这一部分,我将方法更新为:
def eager_load(*args)
ActiveRecord::Associations::Preloader.new.preload(self, *args)
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,它现在做了一些奇怪的事情.看一看:
2.1.2 :001 > u = User.first
[2015-01-06 23:18:03] DEBUG ActiveRecord::Base : User Load (0.3ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
=> #<User id: 1, ...>
2.1.2 :002 > u.eager_load :characters
[2015-01-06 23:18:07] DEBUG ActiveRecord::Base : Character Load (0.2ms) SELECT `characters`.* FROM `characters` WHERE `characters`.`user_id` IN (1)
[2015-01-06 23:18:07] DEBUG ActiveRecord::Base …Run Code Online (Sandbox Code Playgroud) 我的控制台应用程序可以log-level=<LEVEL>选择.看一下Java中的一些例子,看起来通常可以改变SLF4J记录器级别,但是使用scala-logging库似乎并非如此 - 无论我如何创建记录器,它都没有setLevel可用的方法.有什么建议?
我想要一个特征Foo来提供transform可以对其应用函数的方法。另外,我想强制实现类具有一种increment可以某种方式转换对象的方法。天真的解决方案:
trait Foo {
def transform(fun: Foo => Foo): Foo = fun(this)
def increment(n: Int): Foo
}
case class A(a: Int) extends Foo {
// expecting available: transform(fun: A => A): A
// to be implemented: increment(n: Int): A
...
}
Run Code Online (Sandbox Code Playgroud)
上面将无法工作......继承transform仍预计Foo => Foo,不A => A和increment仍想返回Foo,没有A。
再尝试一次:
trait Foo {
def transform[C <: Foo](fun: C => C): C = fun(this.asInstanceOf[C])
def increment[C …Run Code Online (Sandbox Code Playgroud)