- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
class Game(
@MappedCollection(idColumn = "game") <---- unnecessary
var rules: List<Rule> = emptyList(),
){
@Id
var id: Long? = null
}
data class Rule(
@MappedCollection(idColumn = "rule", keyColumn = "rule_key")<---- unnecessary
val ruleValues: List<RuleValue>
)
data class RuleValue(val value: String)
架构是
create table game
(
id serial primary key
);
create table rule
(
id serial primary key,
game long references game (id),
game_key integer
);
create table rule_value
(
id serial primary key,
game long references game (id),
game_key integer,
rule long references rule (id),
rule_key integer,
value varchar(256)
);
简而言之,我有一个 Game
作为根聚合。 游戏
有一个规则
列表(顺序很重要),规则
有一个规则值列表(顺序很重要)
。 规则值
目前只是一个字符串,但将来可能会扩展。
我有 2 个问题:
1) 未找到所需的标识符属性:当我尝试保存游戏时,我得到 Caused by: java.lang.IllegalStateException: 未找到类 com 所需的标识符属性...规则值!
异常消息。
2) java.sql.SQLSyntaxErrorException:为什么我需要 rule_value
中的 game
和 game_key
列 table ?如果我不放置它们,我会得到 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'game_key' in 'field list'
我正在使用 Spring Boot 版本 2.2.5.RELEASE 和 org.springframework.boot:spring-boot-starter-data-jdbc
对应于 spring-data-jdbc
版本1.1.5.RELEASE
解决方案1:将 ID 字段添加到类中
正如 @chrylis-onstrike- 建议的那样,我在所有数据类中添加了 @Id
字段
class Game(
@MappedCollection(idColumn = "game")
var rules: List<Rule> = emptyList(),
){
@Id
var id: Long? = null
}
data class Rule(
@MappedCollection(idColumn = "rule", keyColumn = "rule_key")
val ruleValues: List<RuleValue>
) {
@Id
var id: Long? = null <---- this is new
}
data class RuleValue(val value: String) {
@Id
var id: Long? = null <---- this is new
}
架构更改为
create table game
(
id serial primary key
);
create table rule
(
id serial primary key,
game long references game (id),
game_key integer
);
create table rule_value
(
id serial primary key,
# game long references game (id), <---- removed this
# game_key integer, <---- removed this
rule long references rule (id),
rule_key integer,
value varchar(256)
);
<小时/>
解决方案2:将复合主键添加到脚本中
class Game(
@MappedCollection(idColumn = "game")
var rules: List<Rule> = emptyList(),
){
@Id
var id: Long? = null
}
data class Rule(
@MappedCollection(idColumn = "rule", keyColumn = "rule_key")
val ruleValues: List<RuleValue>
)
data class RuleValue(val value: String)
架构更改为
create table game
(
id serial primary key
);
create table rule
(
# id serial primary key, <---- removed
game integer,
game_key integer,
primary key (game, game_key) <---- added
);
create table rule_value
(
# id serial primary key, <---- removed
game integer, <---- added
game_key integer, <---- added
rule_key integer,
value varchar(2048),
primary key (game, game_key, rule_key) <---- added
);
<小时/>
结论您需要确定您的对象是值对象
还是实体。值对象在类中可能不应该有 id 字段,因为它的标识是由它携带的值定义的。但是,您需要识别数据库表中的一行并将其与其所有者相关联,因此如果您想将它们保留在不同的表上,则需要在值对象中创建复合主键。
最佳答案
未找到所需的标识符属性。
我同意@chrylis-onstrike - 该错误告诉您添加带有@Id
注释的字段。但我也同意你的观点:情况不应该如此。我至少需要完整的堆栈跟踪才能了解发生了什么。如果有复制器就更好了。欢迎在 https://jira.spring.io/browse/DATAJDBC 上创建问题
对所提供的重现器的进一步调查表明,问题是由 id
列仍然存在于数据库中并且是 identity
列引起的。因此,在插入后 JDBC 确实返回一个值,并且 Spring Data JDBC 尝试将其设置为实体上的 id,然后由于问题中提到的异常而无法设置该 id。
为什么我需要 rule_value
表中的 game 和 game_key
列?
只要 Rule
没有专用 id,其主键就是 game
和 game_key
的组合,因此引用来自 rule_value
后面由这两个字段组成。
当 Rule
有 ID 时,它们不应该是必需的。
关于java - Spring数据JDBC : Required identifier property not found for a MappedCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495551/
更新:添加关于 Hashable 的相同错误 我已经创建了一个 Identifiable 兼容协议(protocol)和兼容结构。然后,当我创建列表并在 ForEach 中引用它时,我收到错误 Typ
这只是我偶然发现的例子! 我正在使用 cout与 operator // imports the declaration of std::cout using namespace std; // ma
我有一些表,我使用 MySQL Workbench 创建了 role_has_action 表。 创建的字段是:(role_id,action_id,action_controller_id): (为
我有一个 codesign 无法完全验证的应用程序,因为它“不满足其指定的要求”。第一次检查返回“在磁盘上有效”,所以没关系。 codesign -dvvvv -r- PATH_TO_APP 告诉我要
我正在使用 Java SDK 创建 SAS 来访问 blob。这是代码: SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy(); p
#include "stdafx.h" #include #include #include #include #include using namespace std; #define T
我在代码中看到了这两种方法。你能解释一下这两者有什么区别吗?正如我认为它与 C++ 完成命名空间查找的方式有关,您能否也提供一些相关信息,或者提供一个好的文档的链接?谢谢。 最佳答案 示例: #inc
我一直在使用一个工具 sbconstants从我的 Xcode 项目中的 Storyboard 标识符和重用标识符创建外部常量。 我已将包含这些常量的所有声明的 header #imported 到项
我想知道 bundle Identifier(在 info.plist 中)之间的区别。以及产品 Bundle Identifier(在 Build Setting -> Packaging -> P
我有课Identifier它本质上是 UUID 的类型安全包装器(因此类 Foo 包含 Identifier )。 FooStore类有一个方法 List> bulkReadIdentifiers()
在 Go 中,公共(public)名称以大写字母开头,私有(private)名称以小写字母开头。 我正在编写一个不是库的程序,它是一个单独的包。是否有任何 Go 习语规定我的标识符应该全部公开还是全部
我有一个页面 url,它看起来像: http://mydomain.com/nodes/32/article/new?return=view 安装 tomcat 7 后,尝试访问它时出现此异常: /n
我正在学习以下教程: http://www.appcoda.com/ios7-programming-ibeacons-tutorial/ 但是,我没有使用 iPhone 作为信标,而是使用制造商(R
我在为我的 iPhone 应用程序的下一版本上传 .app 文件时收到此错误“Bundle Identifier differents from prior bundle identifier”。 注
Scene 1, Layer 'script', Frame 1, Line 9 1084: Syntax error: expecting identifier before this. Sc
升级到 Xcode 7 后,我注意到 CFBundleIdentifier 已开始指向在 Build Settings/Packaging 中找到的产品捆绑标识符,而不是 Info.Plist 中的捆
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this question 我在
我使用 Apache DBCP 来获取连接池,我每次都使用 PoolingDataSource 来获取连接。当我向数据库中插入一个对象时,它工作得很好,但是当我尝试从数据库中选择一个元素时,就会出现问
由于我项目的 react-native 版本 (0.44.3),我正在尝试在版本 0.6.4 中安装包 react-native-today-widget,我能够成功安装包: yarn add rea
之前有人问过这个问题,我已经查看了所有其他 stackoverflow 主题的答案,但我无法解决这个问题。 我的应用程序在所有平台的模拟器中运行良好,但是当我在我的设备上运行该应用程序时,我收到错误代
我是一名优秀的程序员,十分优秀!