2015-08-18 5 views
1

У меня возникла ошибка, когда я использую генератор сглаженного кода в существующей базе данных postgres 9.3, которая использует uuid_generate_v4() для автоматического генерации идентификаторов для таблиц. Я просто начинаю с пятна, и поэтому я не уверен, если это проблема с моим кодом, моей схемой, с самим пятном или если этот сценарий еще поддерживается.Ошибка при использовании графического генератора на postgres с uuid_generate_v4()

В качестве примера, у меня есть столбцы, которые были созданы с заявлениями, как это:

id uuid NOT NULL DEFAULT uuid_generate_v4() 

Когда я запускаю пятно генератор кода с sbt run, я получаю сообщение об ошибке, перечисленных ниже. Эта ошибка приводит к сбою генератора кода, и поэтому код не генерируется.

[error] (run-main-0) java.lang.IllegalArgumentException: Invalid UUID string: uuid_generate_v4() 
java.lang.IllegalArgumentException: Invalid UUID string: uuid_generate_v4() 
    at java.util.UUID.fromString(UUID.java:194) 
    at slick.driver.PostgresDriver$ModelBuilder$$anon$2$$anonfun$default$1.applyOrElse(PostgresDriver.scala:75) 
    at slick.driver.PostgresDriver$ModelBuilder$$anon$2$$anonfun$default$1.applyOrElse(PostgresDriver.scala:65) 
    at scala.PartialFunction$Lifted.apply(PartialFunction.scala:223) 
    at scala.PartialFunction$Lifted.apply(PartialFunction.scala:219) 
    at scala.Option.collect(Option.scala:282) 
    at slick.driver.PostgresDriver$ModelBuilder$$anon$2.default(PostgresDriver.scala:65) 
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder$$anonfun$defaultColumnOption$3.apply(JdbcModelBuilder.scala:254) 
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder$$anonfun$defaultColumnOption$3.apply(JdbcModelBuilder.scala:254) 
    at scala.Option.getOrElse(Option.scala:121) 
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.defaultColumnOption(JdbcModelBuilder.scala:253) 
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.convenientDefault(JdbcModelBuilder.scala:263) 
    at slick.jdbc.JdbcModelBuilder$ColumnBuilder.model(JdbcModelBuilder.scala:281) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder$$anonfun$columns$1.apply(JdbcModelBuilder.scala:162) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder$$anonfun$columns$1.apply(JdbcModelBuilder.scala:162) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) 
    at scala.collection.Iterator$class.foreach(Iterator.scala:742) 
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1194) 
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) 
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245) 
    at scala.collection.AbstractTraversable.map(Traversable.scala:104) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder.columns$lzycompute(JdbcModelBuilder.scala:162) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder.columns(JdbcModelBuilder.scala:162) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder.columnsByName$lzycompute(JdbcModelBuilder.scala:164) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder.columnsByName(JdbcModelBuilder.scala:164) 
    at slick.jdbc.JdbcModelBuilder$ForeignKeyBuilder.buildModel(JdbcModelBuilder.scala:314) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder$$anonfun$buildForeignKeys$1.apply(JdbcModelBuilder.scala:169) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder$$anonfun$buildForeignKeys$1.apply(JdbcModelBuilder.scala:169) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) 
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245) 
    at scala.collection.AbstractTraversable.map(Traversable.scala:104) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder.buildForeignKeys(JdbcModelBuilder.scala:169) 
    at slick.jdbc.JdbcModelBuilder$TableBuilder.buildModel(JdbcModelBuilder.scala:160) 
    at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3$$anonfun$apply$17.apply(JdbcModelBuilder.scala:94) 
    at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3$$anonfun$apply$17.apply(JdbcModelBuilder.scala:94) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) 
    at scala.collection.immutable.List.foreach(List.scala:381) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245) 
    at scala.collection.immutable.List.map(List.scala:285) 
    at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3.apply(JdbcModelBuilder.scala:94) 
    at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3.apply(JdbcModelBuilder.scala:91) 
    at slick.dbio.DBIOAction$$anonfun$map$1.apply(DBIOAction.scala:43) 
    at slick.dbio.DBIOAction$$anonfun$map$1.apply(DBIOAction.scala:43) 
    at slick.backend.DatabaseComponent$DatabaseDef$$anonfun$runInContext$1.apply(DatabaseComponent.scala:146) 
    at slick.backend.DatabaseComponent$DatabaseDef$$anonfun$runInContext$1.apply(DatabaseComponent.scala:146) 
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) 
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) 
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) 
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121) 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253) 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346) 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 
java.lang.RuntimeException: Nonzero exit code: 1 
    at scala.sys.package$.error(package.scala:27) 
    at sbt.BuildCommon$$anonfun$toError$1.apply(Defaults.scala:1943) 
    at sbt.BuildCommon$$anonfun$toError$1.apply(Defaults.scala:1943) 
    at scala.Option.foreach(Option.scala:236) 
    at sbt.BuildCommon$class.toError(Defaults.scala:1943) 
    at sbt.package$.toError(package.scala:4) 
    at $4f4c3fbf06757612bb06$$anonfun$slickCodeGenTask$1.apply(build.sbt:27) 
    at $4f4c3fbf06757612bb06$$anonfun$slickCodeGenTask$1.apply(build.sbt:19) 
    at scala.Function4$$anonfun$tupled$1.apply(Function4.scala:35) 
    at scala.Function4$$anonfun$tupled$1.apply(Function4.scala:34) 
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47) 
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40) 
    at sbt.std.Transform$$anon$4.work(System.scala:63) 
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) 
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226) 
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) 
    at sbt.Execute.work(Execute.scala:235) 
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) 
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226) 
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159) 
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
[error] (compile:managedSources) Nonzero exit code: 1 

Вот подробности моего проекта SBT ...

проекта/build.properties

sbt.version = 0.13.8 

проект/plugins.sbt

logLevel := Level.Warn 

build.sbt

name := "slick_gen_schema_test" 

version := "1.0" 

scalaVersion := "2.11.7" 

libraryDependencies ++= List(
    "org.postgresql" % "postgresql" % "9.3-1103-jdbc4", 
    "com.typesafe.slick" % "slick_2.11" % "3.0.2", 
    "com.typesafe.slick" % "slick-codegen_2.11" % "3.0.2" 
) 

slick <<= slickCodeGenTask 

sourceGenerators in Compile <+= slickCodeGenTask 

lazy val slick = TaskKey[Seq[File]]("gen-tables") 
lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) => 
    val outputDir = (dir/"main/slick").getPath 
    val username = "postgres" 
    val password = "postgres" 
    val url = "jdbc:postgresql://10.0.11.13:5432/example" 
    val jdbcDriver = "org.postgresql.Driver" 
    val slickDriver = "slick.driver.PostgresDriver" 
    val pkg = "dao" 
    toError(r.run("slick.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg, username, password), s.log)) 
    val fname = outputDir + "/dao/Tables.scala" 
    Seq(file(fname)) 
} 

Что такое правильный способ использовать гладкий генератор кода в этом случае?

ответ

1

Это ошибка Slick, которая была исправлена ​​в Slick master (https://github.com/slick/slick/pull/1472).

Пока не выйдет Slick 3.2, вы можете решить проблему, изменив схему, чтобы не иметь функционального значения по умолчанию.

+0

Удивительно, спасибо за обновление. Мне не обязательно нужен обходной путь прямо сейчас, поэтому я буду следить за пятнами 3.2. – mvalley

Смежные вопросы