2012-07-29 65 views
1

我有Squeryl:KeyedEntity.id不更新在插入

class Transaction(
    val ... 
) extends KeyedEntity[Long] { 
    val id:Long = 0 
} 

val transaction = table[Transaction]("transactions") 

on(transaction) {t => 
    declare(
     t.id is unique 
     ... (other fields) 
    ) 
} 

不是由Squeryl生成的数据库表中的表定义(I创建它手动),但“ID”列被设置为PrimaryKey和AutoIncrement。

现在我在此表中插入一行:

val row = new Transaction(...) 
val rowResult = transaction.insert(row) 
println("Id1="+row.id+"; Id2="+rowResult.id) 

该行被正确地插入到数据库中,有一个ID被分配(!= 0)。 但是应用程序在命令行上打印“ID1 = 0; ID2 = 0”。

为什么?我如何获得分配的ID?

编辑: 我也试着表定义这样

class Transaction(
    val id: Long, 
    ... 
) extends KeyedEntity[Long] 

没有做任何的差异。

回答

0

当我删除了声明

t.id is unique 

它的工作原理。所以问题解决了。

这是一个squeryl中的错误?

+3

这不是一个错误。默认情况下,任何数字ID字段都设置为自动递增。当你指定't.id是唯一的'时,你重写了默认行为。没有必要指定它是唯一的,因为它是一个主键,但是如果你想要的话,你必须包含autoincremented属性以及't.id是(unique,autoIncremented)' – 2012-08-16 17:05:40