gpt4 book ai didi

java - 如何使用 Hibernate 在 MySQL 数据库中创建特定表

转载 作者:行者123 更新时间:2023-11-29 18:12:47 25 4
gpt4 key购买 nike

所以出现以下情况:

我正在使用 Hibernate 向数据库上传/下载数据,效果很好。

目前我有两个表,“Parent”(即父表)和“Child”(即子表)。我有 OneToMany/ManyToOne 关系。我只上传父级,由于级联,子级会自动上传。Parent.class 有一个 List(Child)。

如果“Parent”实体被更改/更新,我想将“旧版本”移动到名为“Parent_OLD”的表中(当然还有通过级联的子实体),并向旧实体添加时间戳。

所以我目前遇到的问题是:我试图通过创建一个新类“Parent_OLD”来解决这个问题,除了时间戳之外,它看起来与“Parent”完全相同。所以我所做的是:每当我将新数据上传到数据库时,我都会检查该实体是否已经存在,如果存在,我会通过“getters”将数据传递给“Parent_OLD”。到目前为止,这工作得很好,因为我只需要传递 3 个属性,但如果我最终有更多字段,那么对此有一个不同的解决方案会很方便。

但是将“child_OLD”移动到“Child_OLD”是行不通的。所以如上所述,Parent.class有一个List(Child)。Child_NEW 和 Child_OLD 实际上看起来完全一样,因为它们不需要时间戳。但是由于 Child.class 之上的 Hibernate Annotation,Child.class 的每个实体都被加载到“Child”表中。

所以我创建了一个Child_OLD.class。这意味着:我有一个当前的父实体,带有一个列表(子)。我想将父级(包括列表)传递给 Parent_OLD 实体。

但我无法将 List(Child) 转换为 List(Child_OLD)。我尝试将其转换为对象列表,然后转换为 Child_OLD,但这不起作用。通过“getters”传递属性是不可行的,因为该类有大约 60 个字段。我还尝试创建一个抽象类“Child”,但我仍然没有设法让它工作。

所以我认为如果我可以告诉 Hibernate 将某些实体加载到不同的表中,那将会非常简单。因此,可能类似于 CheckIfExistsAndIfItDoesCopyToOldTable-Method 上方的注释。这可能吗?或者有人知道我该如何解决我的问题吗?

我想我需要道歉,因为我不知道我如何清楚地解释了我的问题。对于可能令人困惑的文字深表歉意,并提前感谢您的想法!

编辑:我想备份父级和子级。但如果可能的话,这应该通过级联发生。因此,通过备份父项,包含子项的列表应移至 Child-BackUp-Table 中。

最佳答案

据我了解,您不打算将 List(Child) 保存到备份表中,这意味着您不必将字段作为数据库列包含在内。

对于您遇到的一般问题,可能可以使用数据库端解决方案而不是服务器端解决方案来解决。你检查过数据库触发器吗?和具有默认值/自动生成值的数据库日期列?

MySQL trigger to insert row into another table

关于java - 如何使用 Hibernate 在 MySQL 数据库中创建特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47261613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com