저는 Squeryl을 사용하여 하나의 데이터베이스에서 테이블의 내용을 가져 와서 다른 데이터베이스의 해당 테이블에 추가하려고합니다. 기본 키는 프로세스에서 다시 할당해야하지만 오류 은 "SIMID"열에 대해 허용되지 않습니다. 왜 이런거야?Squeryl과 데이터베이스 연결
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)
))
}
}
업데이트 : 나는 DB를 함께 할 수있는 뭔가있을 것 같아요. 그것들은 JPA/EclipseLink를 사용하여 Java 프로젝트에서 생성되었으며 내 엔티티 용 테이블을 생성하는 데 추가적으로 기본 키 생성을위한 SEQUENCE 테이블이 생성되었습니다.
나는 Squeryl에 새로운 테이블을 만들고 수동으로 두 데이터베이스의 내용을 넣어 동일한 효과를 얻을 수 있음을 알았습니다. 흥미롭게도이 새로운 테이블에는 자동으로 생성 된 SEQUENCE 테이블이 없습니다. 그래서 JPA/EclipseLink가 기본 키를 생성하는 방법에 대한 추측입니다.
업데이트 2 : 요청으로 , 나는 URL에 trace_level_file = 3을 추가하고 파일 위치 : resultsA.trace.db 및 resultsB.trace.db을. B가 더 재미 있다고 생각합니다. 또한 불필요한 테이블을 제거한 데이터베이스 here의 단순화 된 버전을 배치했습니다 (resultsA 및 resultsB에 대해 동일한 데이터베이스가 사용됨).
어떤 버전의 Squeryl을 사용하고 있습니까? 재현 할 수있는 테스트 케이스를 github에 게시하여 살펴볼 수 있습니까? –
나는 며칠 동안 일하고 있지 않으므로 빈 테스트 DB를 즉시 게시 할 수는 없지만 위의 업데이트를 추가하여 단서를 제공 할 수 있기를 바랍니다. Thanks – Pengin
'; trace_level_file = 3'을 데이터베이스 URL에 추가 한 다음'.trace.db' 파일을 확인하거나 업로드 할 수 있습니까? 문제를 일으키는 모든 JDBC 메소드 호출을 포함해야합니다. –