Я пытаюсь использовать Squeryl, чтобы взять содержимое таблицы из одной базы данных и добавить ее к эквивалентной таблице в другой базе данных.Первичный ключ должен быть переназначен в процессе, но я получаю ошибку NULL не допускается для столбца "SIMID" .Почему это так?
object Concatenator {
def main(args: Array[String]) {
Class.forName("org.h2.Driver");
val seshA = Session.create(
java.sql.DriverManager.getConnection("jdbc:h2:file:data/resultsA", "sa", "password"),
new H2Adapter
)
val seshB = Session.create(
java.sql.DriverManager.getConnection("jdbc:h2:file:data/resultsB", "sa", "password"),
new H2Adapter
)
using(seshA){
import Library._
from(sims){s => select(s)}.foreach{item =>
using(seshB){
sims.insert(item);
}
}
}
}
case class Simulation(
@Column("SIMID")
var id: Long,
val date: Date
) extends KeyedEntity[Long]
object Library extends Schema {
val sims = table[Simulation]
on(sims)(s => declare(
s.id is(unique, indexed, autoIncremented)
))
}
}
Обновление: Я думаю, что это может быть связано с БД.Они были созданы в проекте Java с использованием JPA / EclipseLink, и в дополнение к созданию таблиц для моих сущностей он также создал таблицу с именем SEQUENCE, предположительно для генерации первичного ключа.
Я обнаружил, что могу создать новую таблицу в Squeryl и вручную поместить в нее содержимое обеих баз данных, достигая, таким образом, того же эффекта.Интересно, что у этой новой таблицы не было автоматически сгенерированной таблицы SEQUENCE.Итак, я предполагаю, что все сводится к тому, как JPA / EclipseLink генерировал мои первичные ключи?
Обновление 2: По запросу я добавил trace_level_file = 3 к URL-адресу, и файлы находятся здесь: resultsA.trace.db и resultsB.trace.db .Я думаю, что B более интересный.Кроме того, я поместил упрощенную версию базы данных здесь , в которой удалены ненужные таблицы (та же база данных используется для результатов A и результатов B).