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

标签 java mysql hibernate jpa

所以出现以下情况:

我正在使用 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/

相关文章:

java - 正则表达式中的奇怪行为

java - 使用java流影响一些逻辑列表

mysql - 优化mysql查询运行时间较长

php - MySQL查询-即使相关表中不存在一个字段,也返回咨询

java - 更新时 Hibernate 集合为空

java - HIbernate 不能用外键删除实体。外键设置为空

java - Switch 语句在嵌套类型中失败

java - 在 Swing 中创建方形按钮

MySql - 从多个表中选择联合或使用临时表更好吗?

java - Spring Boot Rest 在注册时设置用户默认配置文件图像