我似乎找不到解决这个奇怪的错误的方法:
class Names(tag: Tag) extends Table[Name](tag, "NAME") with Identifiable[Name]{
def firstName = column[String]("firstName")
def lastName = column[String]("lastName")
def profileId = column[Int]("profileId")
def * = (id.?, firstName, lastName, profileId) <> ((Name.apply _).tupled, Name.unapply)
def profileFk = foreignKey("profile_fk", profileId, TableQuery[Profiles])(_.id, onDelete=ForeignKeyAction.Cascade)
}
class PhoneNumbers(tag: Tag) extends Table[PhoneNumber](tag, "PHONENUMBER") with Identifiable[PhoneNumber] {
def number = column[String]("number")
def kind = column[String]("kind")
def profileId = column[Int]("profileId")
def * = (id.?, number, kind, profileId) <> ((PhoneNumber.apply _).tupled, PhoneNumber.unapply)
def profileFk = foreignKey("profile_fk", profileId, TableQuery[Profiles])(_.id, onDelete=ForeignKeyAction.Cascade)
}
而profile类仅由id字段组成。Identiable提供ID属性。
我将Slick 3与MySQL一起使用。
对于名称,生成配置文件的foreignKey,而对于PhoneNumbers则不生成。为什么?好像没什么区别?
更新:
在此相关声明:
create table `PHONENUMBER` (`id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,`number` TEXT NOT NULL,`kind` TEXT NOT NULL,`profileId` INTEGER NOT NULL)
和:
alter table `PHONENUMBER` add constraint `profile_fk` foreign key(`profileId`) references `PROFILE`(`id`) on update NO ACTION on delete CASCADE
完整输出:
创建表profile
(id
INTEGER NOT NULL AUTO_INCREMENT主键,userid
INTEGER NOT NULL)
创建表version
(id
INTEGER NOT NULL AUTO_INCREMENT主键,timestamp
INTEGER NOT NULL,vector
INTEGER NOT NULL)
创建表name
(id
INTEGER NOT NULL AUTO_INCREMENT主键,firstname
TEXT NOT NULL,lastname
TEXT NOT NULL,profileid
INTEGER NOT NULL,versionid
INTEGER NOT NULL)
创建表phoneNumber
(id
INTEGER NOT NULL AUTO_INCREMENT主键、number
文本NOT NULL、kind
文本NOT NULL、profileid
INTEGER NOT NULL、versionid
INTEGER NOT NULL)
创建表视图
(id
整数不为空AUTO_INCREMENT主键)创建表phoneNumbers_views
(phoneNumber
整数不为空,视图
整数不为空)
创建表凭据
(ID
整数不为空AUTO_INCREMENT主键、username
文本不为空、密码
文本不为空、userid
整数不为空)
创建表用户
(id
整数不为NULL AUTO_INCREMENT主键)
创建表api_key
(id
INTEGER NOT NULL AUTO_INCREMENT主键,token
文本NOT NULL,deviceid
文本NOT NULL,credentialsid
INTEGER NOT NULL)
alter tableprofile
add constraintuser_fk
外键(userid
)引用user
(id
)对更新没有操作对删除没有操作
更改表name
添加约束profile_fk
外键(profileID
)引用profile
(ID
)更新时删除级联时不执行操作
更改表name
添加约束version_fk
外键(versionID
)引用version
(ID
)更新时无操作删除时无操作
更改表phoneNumber
添加约束profile_fk
外键(profileID
)引用profile
(ID
)更新时删除级联时不执行操作
更改表phoneNumber
添加约束version_fk
外键(versionID
)引用version
(ID
)更新时无操作删除时无操作
alter tablephoneNumbers_views
添加约束phoneNumber_fk
外键(phoneNumber
)在更新时引用phoneNumber
(id
)在删除时没有操作alter tablephoneNumber
(view_fk
添加约束外键(
view
)在更新时引用view
(view
)在删除时没有
更改表
credential
添加约束user_fk
外键(userid
)引用user
(id
)更新时无操作删除时无操作
alter table
api_key
添加约束credentials_fk
外键(credentialsid
)引用credential
(id
)更新没有操作删除没有操作
`symbol由于markdown而被隐藏,但在原始输出中
编辑2:
val profiles = TableQuery[Profiles]
val names = TableQuery[Names]
val phoneNumbers = TableQuery[PhoneNumbers]
val views = TableQuery[Views]
val phoneNumbersToViews = TableQuery[PhoneNumbersToViews]
val users = TableQuery[Users]
val credentials = TableQuery[CredentialsSchema]
val apiKeys = TableQuery[ApiKeys]
val versions = TableQuery[Versions]
val schema = profiles.schema ++
versions.schema ++
names.schema ++
phoneNumbers.schema ++
views.schema ++
phoneNumbersToViews.schema ++
credentials.schema ++
users.schema ++
apiKeys.schema
SlickDB().run(DBIO.seq(
schema.create
))
schema.createStatements.foreach(println)
“对于名称生成配置文件的foreignKey,而对于PhoneNumbers则不生成。为什么?似乎没有区别?”
我认为缺乏差异是这里的问题所在。
您对names.profilefk
和phoneNumbers.profilefk
使用了相同的外键名称(“profile_fk”)。MySQL外键名称必须是唯一的。
我建议将“profile_fk”替换为“name_profile_fk”和“phoneNumber_profile_fk”。
但是,您应该看到一个例外。您包含的第一条alter table语句...
alter table NAME add constraint profile_fk foreign key(profileId) references PROFILE(id) on update NO ACTION on delete CASCADE
...应该没问题,但第二个...
alter table PHONENUMBER add constraint profile_fk foreign key(profileId) references PROFILE(id) on update NO ACTION on delete CASCADE
...是应该有例外的地方。
如果您没有看到异常,可能是您的应用程序在您执行的将来返回之前终止了。您可以通过在slickdb().run
命令周围放置一个await来测试这一点。例如,
import scala.concurrent.Await
import scala.concurrent.duration._
Await.result(
SlickDB().run(DBIO.seq(schema.create))
, 10 seconds)
我试图建立APK,以张贴我的请求在离子在游戏商店。但是当涉及到下面的命令时,我得到了错误: PS c:\projetos\xxx>jarsigner-verbose-sigalg sha1withrsa-digestalg sha1-keystore android.keystore platforms/android/app/build/outputs/apk/release/app-relea
我正在学习LiquiBase。我正在尝试从changelog生成SQL。出于某种原因,它生成的唯一SQL是对表的锁定。 我期待drop、create和update表的SQL,但没有看到任何东西。 LiquiBase:3.4.1版 数据库:MS SQL Server
问题内容: 我正在尝试将jOOQ包含在我的代码中,但是未生成任何代码。 执行时,不会生成任何源。我希望它创建一个在以下-file文件中定义的类。 我的pom.xml文件如下所示: 我假设应该使用适当的类来创建目录。Maven构建成功运行,没有任何错误。 您可以在此GitHub存储库中找到整个项目。 问题答案: 您正在使用内存数据库:。jOOQ代码生成器启动时,它将接收到一个空的 新 数据库,而不是
我正在用Gradle编写一个构建文件来执行Java构建操作。然而,Gradle并没有为我的项目生成Javadocs。格拉德尔说。org的文档,要在Gradle中实现Javadocs任务,必须指定源和类路径。 但是,当我运行命令或时,javadocs的默认文件夹(build\docs)永远不会创建,因此不会为项目生成html文件。我能做些什么来解决这个问题?
我正在尝试使用ANTLRV4为一个简单的自定义语法生成一个lexer和解析器。问题是,当我运行Antlr.jar实用程序时,它生成了一个Lexer文件,而不是一个解析器文件,我认为它应该生成。 简单语法 hellolexer.js hellolexer.tokens 所需输出 hellolexer.js helloparser.js hellolistener.js hellovisitor.js
当我尝试运行“ php artisan key:generate ” 时,我在提示中收到以下错误错误屏幕截图实际上我正在不同的笔记本电脑上运行一个 laravel 项目。我在生成密钥时遇到此问题。我该如何解决?