java - 使用 Hibernate 将多个 Java 对象映射到同一个表中的不同行
问题描述
我环顾四周,但与每个表多个对象相关的大多数答案都在谈论继承或与我正在寻找的东西有点不同的东西。
我有几张桌子,我们称它们为 Vehicle 和 Order :
╔════╦════════════╗ ╔════╦════════════╗
║ ║ Vehicle ║ ║ ║ Order ║
╠════╬════════════╣ ╠════╬════════════╣
║ PK ║ id ║ ║ PK ║ id ║
║ ║ ... ║ ║ ║ ... ║
║ ║ address_id ║ ║ ║ address_id ║
║ ║ address ║ ║ ║ address ║
║ ║ city ║ ║ ║ city ║
║ ║ state ║ ║ ║ state ║
║ ║ zip ║ ║ ║ zip ║
╚════╩════════════╝ ╚════╩════════════╝
如您所见,地址信息在每个表中。还有其他字段,如 ... 所示,专门用于每个表。
我想要做的是将这些表中的地址信息映射到 Java 中的 Address 对象以单独处理。对于这些表中的每一个,我都从这样的事情开始:
@Data
@Entity
@Table(name = "vehicle")
@SuppressWarnings("serial")
public class Vehicle implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "vehicle_id")
private int id;
// other fields
@Valid
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id")
private Address address;
}
@Data
@Entity
@Table(name = "order")
@SuppressWarnings("serial")
public class Order implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "order_id")
private int id;
// other fields
@Valid
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id")
private Address address;
}
这些对象除了在同一个应用程序中之外不相关,因此这里没有继承或任何东西。我想有一个单独的 Address 对象,这两个对象都具有,并且表的地址信息从中提取并推送到该对象。
我的问题是,这可能是我的想法吗?这就是数据库的设置方式,这就是我寻找解决方法的原因;我知道为地址设置一个单独的表格可能会更好。我可以在没有地址对象的情况下单独保存每个对象中的地址信息,但我认为拥有一个单独的地址对象将有助于某些操作。
解决方案
看来您正在寻找的是 JPA 的@Embeddable
,请参见例如
https://en.wikibooks.org/wiki/Java_Persistence/Embeddables
您将注释Address
为@Embeddable
,其字段将神奇地复制到每个拥有Address
.
推荐阅读
- mobile - 是否可以将 Js Interop 与 Mobile Blazor 绑定一起使用?
- grep - 在多个目录/子目录中使用 grep 并过滤掉结果?
- c++ - 在 C++20 之前将 malloc 用于 int 未定义的行为
- async-await - 意外的承诺
等待使用 axios 返回 - python - AWS python lambda - 在 lambda 中导入模块与从本地项目中导入模块的区别
- docker - “docker build” 只需要 1 个参数
- python - 增加 plotly choropleth 窗口的大小
- r - 我正在尝试运行 Anderson Darling 测试,并且这种情况一直在发生(见屏幕截图)。我该如何解决这个问题?
- javascript - 仅在此范围内更改类
- python - web scraping HTML table