我如何更新外国实体?

时间:2014-02-02 22:33:52

标签: scala sorm

我似乎无法使用.copy(..)Db.save更新外国实体中的字段。根本没有抛出任何异常,从方法返回的T with Persisted反映了我尝试更新的内容。但是,当我尝试使用Db.queryDb.fetchById检索值时,只更新非外来字段。例如:

case class Foo (a: String)
case class Bar (b: String, barfoo: Foo)
....
....
val foo1 = Db.save(Foo("Hello"))

val bar1 = Db.save(Bar("World", foo1))

val result = Db.save(bar1.copy(b="Beatiful World", 
        barfoo = bar1.barfoo.copy(a = "Hello My")))

println(result) // Prints: Bar(1,Beatiful World,Foo(1,Hello My))

println(Db.fetchById[Bar](result.id)) // Prints: Bar(1,Beatiful World,Foo(1,Hello))

因此,您可以看到barfoo字段未更新。

这是接近更新外国实体的错误方法吗?或者这可能是一个错误?

我正在使用SORM v0.3.12 btw。

1 个答案:

答案 0 :(得分:1)

此行为是设计使然。您需要显式更新内部实体。即:

Db.save(bar1.barfoo.copy(a = "Hello My"))
Db.save(bar1.copy(b="Beatiful World"))

实际上,在SORM开发的一个阶段,内部记录的更新是自动的(意味着您的示例将按预期工作),但它需要一个专用的UPDATE语句,在内部实体的情况下是多余的没改变。所以决定明确这一点。

这仍然是一个值得商榷的主题,未来版本可能会选择不同的方法。