java - 通过 JPA 注释的聚合关系

标签 java jpa annotations model-associations

我试图通过 JPA 注释建立两个 Java 类之间的聚合关系,以便将它们保存到数据库中。

enter image description here

public class Ticket 
{
    private String ticketNo;
    private Date releasedDate;
    private boolean printed;
}

public class Discount 
{
    private String percentage;
    private Date releasedDate;
    private boolean printed;
}

如提到的here ,聚合关系是单向的,因此只需要映射一侧。从这个page给出的解决方案,我认为解决方案是:

 public class Discount 
    {
        private String percentage;
        private Date releasedDate;
        private boolean printed;
        @ManyToOne(name="TICKET_ID")
        private Ticket ticket;
    }

然而,在某些examples of aggregation ,多方类出现在单方类内部。因此,我也在考虑这一点:

 public class Ticket 
        {
            private String ticketNo;
            private Date releasedDate;
            private boolean printed;
            @OneToMany(mappedBy="ticket")
            private List<Discount> discounts = new ArrayList<Discount>();
        }

哪个选项是正确的?

最佳答案

这是映射单向多对一关系的方式:

@Entity
public class Ticket {
    @Id
    @GeneratedValue
    private Long id;

    private String ticketNo;
    private Date releasedDate;
    private boolean printed;

    // getters and setters
}

@Entity
public class Discount {
    @Id
    @GeneratedValue
    private Long id;

    private String percentage;
    private Date releasedDate;
    private boolean printed;

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name = "TICKET_ID")  // you can rename the join column 
    private Ticket ticket;

    // getters and setters
}

注意:

  • JoinColumn(数据库术语中的外键)必须位于关系的多方(这就是您的情况中的折扣)。
  • @Id 注释也是必需的。在这种情况下,ID 将由持久性提供者自动生成。如果您正在使用数据库序列或表或其他一些策略,您可以重新定义它。

关于java - 通过 JPA 注释的聚合关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311717/

相关文章:

java - 无法获取某种使用 jsoup 解析 HTML 页面的链接

java - 如何使用带有 iBatis (myBatis) 的注释进行 IN 查询?

spring - 如何使用注解将值注入(inject) bean 构造函数

java - 读取S3对象并写入InMemory Buffer

Java 文件转二维数组

java - 用于代理收集的 Hibernate validator

mysql - 我如何告诉 Hibernate 通过外键指向的实体删除表行?

java - Spring Data - 页面请求 - 按功能排序

java - Eclipse:在独立的 SourceViewer 小部件中启用 Java 错误标记

java - 如何在 IntelliJ 中配置 Spring Boot Run Configuratipon