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

使用Hibernate将多个Java对象映射到同一表中的不同行,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我已经到处找过了,但是大多数关于每个表有多个对象的答案都是关于继承或者一些与我要找的有点不同的东西 我有两张桌子,让我们称之为车辆和订单: ╔════╦════════════╗ ╔════╦════════════╗ ║ ║ Vehicle ║ ║ ║ Order ║ ╠════╬════════════╣ ╠════╬════════════╣ ║ PK ║ id ║ ║ PK ║ id ║ ║ ║

我已经到处找过了,但是大多数关于每个表有多个对象的答案都是关于继承或者一些与我要找的有点不同的东西

我有两张桌子,让我们称之为车辆和订单:

╔════╦════════════╗    ╔════╦════════════╗
║    ║  Vehicle   ║    ║    ║   Order    ║
╠════╬════════════╣    ╠════╬════════════╣
║ PK ║ id         ║    ║ PK ║ id         ║
║    ║    ...     ║    ║    ║    ...     ║
║    ║ address_id ║    ║    ║ address_id ║
║    ║ address    ║    ║    ║ address    ║
║    ║ city       ║    ║    ║ city       ║
║    ║ state      ║    ║    ║ state      ║
║    ║ zip        ║    ║    ║ zip        ║
╚════╩════════════╝    ╚════╩════════════╝
如您所见,地址信息在每个表中。还有其他字段表示为。。。这是专门针对每个表的

我要做的是将这些表中的地址信息映射到Java中要单独处理的地址对象。我已经为这些表格中的每一张开始了类似的内容:

@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的
@embedded
s,请参见示例。


您将
地址
注释为
@embeddeble
,它的字段将神奇地复制到每个实体中,这些实体拥有
地址

解决方案1:
@MappedSuperclass
包含由实际实体继承的公共字段;解决方案2:
@embeddeble
地址。