- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个运行 Grails 2.4.5 和 Hibernate 3.6.10 的应用程序。
有一个域对象有一个子 PersistentMap。此 map 存储 4
值始终为字符串的键值对。
在我们的开发和测试环境中,一切正常,然后偶尔
持久映射开始为键或值返回“1”。
父域对象中的其他值很好。问题已经
通过直接更新 map 的记录之一来解决它
在数据库中。这让我觉得它是某种缓存问题,
但我无法在本地环境中重新创建它。
下面的数据库是 MySQL。
以下不是实际代码,而是代表结构。
class MyDomain {
static belongsTo = [owner: Owner]
static hasMany = [relatedDomains: RelatedDomain]
Set relatedDomains = []
Map flags = [:]
String simpleItem
String anotherItem
static constraints = {
owner(nullable: true)
relatedDomains(nullable: true)
flags(nullable: true)
simpleItem(nullable: true)
anotherItem(nullable: true)
}
}
mydomain table
| id | version |owner_id|simple_item|another_item |
|-------|-----------|--------|-----------|-------------|
| 1 | 1 | 1 | A value |Another value|
mydomain_flags table
|flags| flags_ids | flags_elt |
|-----|-----------|-------------|
| 1 | KEY_ONE | VALUE_ONE |
| 1 | KEY_TWO | VALUE_TWO |
| 1 | KEY_THREE | VALUE_THREE |
[ "KEY_ONE": "VALUE_ONE", "KEY_TWO": "VALUE_TWO", "KEY_THREE" :"VALUE_THREE"]
[ "KEY_ONE": "1", "KEY_TWO": "1", "KEY_THREE" :"1"]<br/>
[ "1": "VALUE_ONE", "1": "VALUE_TWO", "1" :"VALUE_THREE"]
最佳答案
我将其归结为 hibernate 的问题。为持久映射生成的别名导致键和元素的别名相同。这是因为别名基于 org.hibernate.mapping.Table 类(在 3.6.10 中)中的静态计数器。它是零星的原因是因为 Grails 将所有域类加载到一个 HashSet 中,然后遍历每个绑定(bind)的集合。由于 Set 有时是无序的,因此具有持久映射的域类将是第三个映射的类,从而导致与元素别名相同的键别名。
此问题已在 Hibernate 版本 4.1.7 中修复
https://hibernate.atlassian.net/browse/HHH-7545
为了解决 Grails 中的问题,我对 GrailsAnnotationConfiguration 类进行了子类化,并在构造函数中创建并丢弃了 10 个 Hibernate Table 实例。这在加载 Grails 域类之前将静态计数器增加到更安全的种子值。
关于java - Hibernate PersistentMap 返回错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534958/
我正在尝试通过 HashMap 音译列表,如下所示: (map {"a" 0 "b" 1 "c" 2} ["a","c","b","a"]) 我想吐槽一下: [0,2,1,0] 我该怎么做? 更正:上
我正在开发一个运行 Grails 2.4.5 和 Hibernate 3.6.10 的应用程序。 有一个域对象有一个子 PersistentMap。此 map 存储 4 值始终为字符串的键值对。 在我
我是一名优秀的程序员,十分优秀!