我最近发布了answer on here,似乎正在发挥作用。已完成的测试是创建新记录。
自实施以来,我发现虽然创建新记录很好,但尝试编辑现有条目都会导致原始记录。 根据Hibernate(Even)在Controller中查看对象的版本为1.我将上面的答案更改为包含版本(无论是关闭还是打开) 在版本为1时,来自hibernate的get请求显示了最新的名称更改但是在列表中甚至查找了mysql db,版本为0,最后更新的是在创建时,条目是原样。
在追踪更改事务类型的数小时后,尝试更改id生成器,似乎没有任何工作。
最终唯一有效的方法是将扩展对象元素放回原始类中,而不是从src / main扩展
因此,实际上重复所有类中的所有条目(我试图集中的内容)通过这个方法来处理每个类的表。
正如我所说的创造新纪录绝对精彩但编辑一些奇怪
因为我总是告诉其他人,所以它是在grails 3.2.8上完成的,但我修改了gorm以使用gormVersion=6.1.4.RELEASE
compile "org.grails.plugins:hibernate5:${gormVersion}"
compile "org.hibernate:hibernate-core:5.1.3.Final"
由于问题不明确,无法澄清实际问题:
鉴于我们有这种情况:
package test
abstract class Tester {
String name
String something
static mapping = {
tablePerConcreteClass true
id generator: 'increment'
version false
}
}
接下来是grails-app/domains/test
中的实际域类:
package test
class Tester1 extends Tester {
}
和
package test
class Tester2 extends Tester {
}
首次尝试生成任何给定记录,即全新记录:
Tester2 tester=new Tester2()
tester.name='something'
//This works
tester.save()
//If I now attempt to reload the object (assuming a re-edit of a given entry)
Tester2 t = Tester2.get(tester.id) // Tester2.read(tester.id) //Tester2.load(tester.id)
t.name="something new"
t.save() //t.save(flush:true)
//on the application it shows at this exact point
assert t.name=='something new' //This is correct at this point
//println "${t.version} shows version 1"
尝试重新显示对象会显示旧数据。查看实际数据库版本为0更新时间是指创建时未更新且数据仍为旧原始值something
而非something new
,如第二次更新时所设置。
我尝试了各种方法和创建没有问题但是尝试加载现有对象以从此模型更新它总是显示原始保存对象而不是更新对象。
将名称对象从扩展src文件移回域类,不再实际扩展src文件,然后使更新正常工作
按6.1.4我的意思是gradle.properties
:
gormVersion=6.1.4.RELEASE
请查看此项目中的更改:https://github.com/vahidhedayati/tableperclass/commit/30a78ab08b0dfaa3721d0d4e30dd31588aa08279
它显示在这次改变之后我看到了奇怪的行为 这里都解释了https://github.com/vahidhedayati/tableperclass/blob/master/README.md
尝试6.1.5和6.1.4相同的命运到目前为止测试(如问题仍然存在)更新github项目与gorm版本