繁体   English   中英

使用Hibernate将多个Java对象映射到同一表中的不同行

[英]Mapping multiple Java objects to different rows in same table with Hibernate

我一直在寻找这个问题,但是与每个表多个对象相关的大多数答案都在谈论继承或与我正在寻找的东西有些不同的东西。

我有几个桌子,叫它们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对象,并将表的地址信息从中推入并推到该地址。

我的问题是,这可能是我考虑的方式吗? 这就是建立数据库的方式,这就是为什么我要寻找一种解决方法。 我知道最好有一个单独的地址表。 我可能只将地址信息分别保存在每个对象中而没有Address对象,但是我认为拥有一个单独的Address对象将有助于某些操作。

似乎您正在寻找的是JPA的@Embeddable ,请参见例如https://en.wikibooks.org/wiki/Java_Persistence/Embeddables

您将Address注释为@Embeddable ,它的字段将神奇地复制到每个拥有Address实体中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM