gpt4 book ai didi

java - JPA 中的持久测量单位

转载 作者:搜寻专家 更新时间:2023-11-01 03:41:04 25 4
gpt4 key购买 nike

这是 this question 的延续我昨天问了。在浏览了各种资源并咨询了人们之后,我找不到任何支持 API 的 JPA 注释,用于映射度量单位。因此,我决定自己创建它。

基于 Martin Fowler 描述的观察和测量的各种模式在他的书中 - Analysis Patterns: Reusable Object Models ,我试图创建一个基本的实现来满足我的需要。我创建了两个实体,UnitQuantity,如下所示:-

单位实体:-

@Entity
@Table(name = "unit")
public class Unit {

@Id
@Column(name = "symbol")
private String symbol;

@Column(name = "name")
private String name;

@Column(name = "multiplier")
private Number multiplier;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "symbol")
private Unit baseUnit;

public Unit() {

}

public Unit(String symbol, String name, Number multiplier, Unit baseUnit) {
this.symbol = symbol;
this.name = name;
this.multiplier = multiplier;
this.baseUnit = baseUnit;
}

/** Getters and Setters **/
}

数量实体:-

@Entity
@Table(name = "quantity")
public class Quantity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int quantityId;

private Number amount;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "unit")
private Unit unit;

public Quantity() {

}

public Quantity(Number amount, Unit unit) {
this.amount = amount;
this.unit = unit;
}

/** Getters and Setters **/
}

Item 实体中,我引用了 Quantity 实体,代表我的 unitOfIssueunitOfPurchase。然后,无论我在哪里处理一些数量,我都会有这个 Quantity 引用。

现在,这就是我现在面临的问题。因为这里的 Quantity 类将是一个 entity。因此,我们必须将其映射到 DB 表。所以,这里需要注意的是,每次我想添加一些数量或更新数量时,都会先在 Quantity 表中输入一个条目,然后在 Item< 中更新它表。我想,问题已经很清楚了。我们将在 Quantity 表中有大量条目,这清楚地表明了一个糟糕的设计。

当我在 JPA 中实现此模式时,有人可以深入了解该方法以及我有哪些选择吗?我该如何解决这个问题?

最佳答案

我会推荐这个。由于度量单位不太可能经常更改,因此值得将它们构建到代码中。这样您就可以在程序本身中有意义地使用这些值。

如果数据库将在其他任何地方使用,它还会使数据库更具凝聚力。您还可以将 Quantity 扩展为 LinearQuantity、ArealQuantity、VolumetricQuantity(等),以确保没有人试图购买 30 英尺的石油。

@Embeddable
public class Quantity{

public enum Unit {FEET,METERS,INCHES,MM}

@Enumerated( value = EnumType.STRING)
private Unit unit;

private Number amount;

public Quantity() {

}
}


@Entity
Public Class PurchaseOrder
{
@Embedded
@AttributeOverrides({
@AttributeOverride(name="unit", column=@Column(name="UNIT")),
@AttributeOverride(name="amount", column=@Column(name="AMOUNT"))
})
private Quantity quantity;
....

}

关于java - JPA 中的持久测量单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14273229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com