我试图通过 JPA 注释建立两个 Java 类之间的聚合关系,以便将它们保存到数据库中。
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/