gpt4 book ai didi

java - Eclipse hibernate pojo 生成包括外键

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:42 25 4
gpt4 key购买 nike

我一直在关注使用 hibernate 从 mysql 数据库生成 pojo 的优秀指南。人们可以在这里找到指南以供引用: Generate pojos with hibernate

我得到的 pojo 具有在存在外键时嵌入其他对象的字段。例如,用户有地址。 Hibernate 正在生成如下内容:

public class User(){
private String name;
private Integer uid;
private Address address;
}

不过,我有一个问题,我希望这些类实际上包含外键值。例如,我希望 User 对象有一个对应于 addressId 的数据库字段的类字段。所以,我希望对象实际上看起来像这样:

public class User(){
private String name;
private Integer uid;
private Integer addressId;
private Address address;
}

有谁知道如何修改 hibernate 代码生成过程,以便将外键值作为对象的字段包含在内?

更新:我找到了一篇描述如何忽略外键关系并将外键作为类字段的 SO 帖子:How to ignore foreign keys?

这里的问题是我两者都想要。我不想忽视这些关系。我想要它们的代表,但我也想要实际的外键值。

更新:

让我更具体地说明为什么我需要这个解决方案。我们正在尝试序列化这些 hibernate 对象。现在,我们有很多不同的 hibernate pojos 正在被逆向工程。我们不想为每个类手动编写序列化例程。如果我们遵循“只需手动将访问方法写入嵌入对象的外键字段”的约定,我们将不得不这样做。此外,即使我们这样做了,pojo 仍然不知道外键的字段叫什么。相反,我们使用带有类型适配器的 gson。

使用 gson,我们序列化 pojo 上的所有字段,只是忽略包含 hibernate 对象的字段。当然,问题是我们没有外键字段。我们在这里需要一些信息,以便一般地序列化任何 hibernate pojo。我们需要知道:

  1. 外键字段名
  2. 外键字段值

最佳答案

您的方法违反了 Hibernate 约定。因为 Hibernate 使用反射,约定对于 Hibernate 完成它的工作是必不可少的。因此,我怀疑 Maouven 的“遵循惯例”方法是最简单的。但是,如果不可协商,您有两种选择。

您的第一个选择是添加一个 transient getter,以公开 getAddressId() 函数。

public class User() {
private String name;
private Integer uid;
private Address address;

// Getters, setters...

@Transient
public boolean getAddressId() {
address.getId();
}
}

您的第二个选择是添加数据访问层以在 Hibernate 对象之上强加您自己的约定。这一抽象层将不受 Hibernate 约定的约束。这样,您的 POJO 将被 DAO ( Data Access Objects ) 包装,您可以根据需要进行设计。

更新:

鉴于您的独特情况,请考虑修改您的序列化步骤。 GSON 通常不能使用 transient 方法,但有一个扩展可以做到 this ,如图here .

另一种解决方案是使用反射以您想要的方式复制对象,然后使用 GSON 序列化复制的对象。

关于java - Eclipse hibernate pojo 生成包括外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34301634/

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