【问题标题】:Mapping entities in JPA/Hibernate without adding additional fields (just by using ids)在 JPA/Hibernate 中映射实体而不添加其他字段(仅通过使用 ids)
【发布时间】:2022-01-11 22:21:28
【问题描述】:

我正在尝试将这三个实体相互映射,而不向其中任何一个添加任何其他字段。它们应该只包含已经存在的字段。我还尝试仅获取表中代表当前存在的实体字段的列,而不获取其他列。

@Entity
public class Order {
    @Id
    private Integer orderId;
    private String title;
    private Customer customer;
    private List<Comment> comments;
}

@Entity
public class Customer {
    @Id
    private Integer customerId;
    private String name;
}

@Entity
public class Comment {
    @Id
    private Integer commentId;
    private Integer orderId;
    private String details;
}

我的理解是我不能简单地使用@OneToOne、@OneToMany 和@ManyToOne 映射,因为CustomerComment 都没有对Order 的引用 。我试图以某种方式直接从 Order 引用 CustomerComment 的 ID。

我尝试过使用@MapsId 和@JoinColumn,但要么我不知道如何正确使用它们,要么它们没有按照我的想法去做。

这个任务有可能吗?如果是,如何将它们相互映射?

【问题讨论】:

  • 这不是 ORM 的想法! Hibernate 的目标是将对象图映射到数据库表。
  • 我的理解是这正是我想要做的。我正在尝试创建从订单到客户和评论的单向引用。

标签: java hibernate jpa orm hibernate-mapping


【解决方案1】:

对于评论的引用,您必须使用@JoinColum

客户参考假定订单表上有一个 customer_id。

@Entity
public class Order {
    @Id
    private Integer orderId;
    private String title;

    @ManyToOne
    @JoinColumn(name = "customer_id")
    private Customer customer;

    @OneToMany
    @JoinColumn(name = "comment_id")
    private List<Comment> comments;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2015-10-03
    • 2013-08-15
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多