如何使用kotlin调用sequence.nextVal

如何使用kotlin调用sequence.nextVal,kotlin,kotlin-exposed,Kotlin,Kotlin Exposed,我们有一个项目,我们使用Postgres序列生成一个不断增加的数字,但我不知道如何在kotlin exposed中实际使用该序列 我看到有一个Sequence类和一个NextVal类封装了一个序列,但据我所知,它们不能被自己使用。我想我可以使用Sequence.nextLongVal(),但这一个返回NextVal类,无法从这个类中获取直通值 那么,如何获得nextVal()执行的值呢?我们在尝试直接使用Postgre和exposed使用Sequence.nextLongVal()时遇到了同样的

我们有一个项目,我们使用Postgres序列生成一个不断增加的数字,但我不知道如何在kotlin exposed中实际使用该序列

我看到有一个Sequence类和一个NextVal类封装了一个序列,但据我所知,它们不能被自己使用。我想我可以使用Sequence.nextLongVal(),但这一个返回NextVal类,无法从这个类中获取直通值


那么,如何获得nextVal()执行的值呢?

我们在尝试直接使用Postgre和exposed使用
Sequence.nextLongVal()
时遇到了同样的问题。我们找到了以下解决方法

使用
exec
假设我们在数据源中定义并创建了一个序列:

val sequence=序列(/*我们序列的参数*/)
...
交易{
SchemaUtils.createSequence(序列)
}
我们建议使用exposed的
exec
定义一个helper函数来检索给定序列的下一个值

fun Transaction.nextValueOf(sequence:sequence):Long=exec(“选择nextval('${sequence.identifier}');”{resultSet->
if(resultSet.next().not()){
抛出错误(“序列'${sequence.identifier}'的结果集中缺少nextValue”)
}
否则{
结果集getLong(1)
}
}?:抛出错误(“无法获取序列“${sequence.identifier}”的下一个值)
现在,我们可以在
事务中使用此函数,如下所示:

事务{
...
val nextValue=nextValueOf(序列)
...
}

我们在试图直接使用Postgre和exposed使用
Sequence.nextLongVal()
时遇到了同样的问题。我们找到了以下解决方法

使用
exec
假设我们在数据源中定义并创建了一个序列:

val sequence=序列(/*我们序列的参数*/)
...
交易{
SchemaUtils.createSequence(序列)
}
我们建议使用exposed的
exec
定义一个helper函数来检索给定序列的下一个值

fun Transaction.nextValueOf(sequence:sequence):Long=exec(“选择nextval('${sequence.identifier}');”{resultSet->
if(resultSet.next().not()){
抛出错误(“序列'${sequence.identifier}'的结果集中缺少nextValue”)
}
否则{
结果集getLong(1)
}
}?:抛出错误(“无法获取序列“${sequence.identifier}”的下一个值)
现在,我们可以在
事务中使用此函数,如下所示:

事务{
...
val nextValue=nextValueOf(序列)
...
}